{
  "version": 3,
  "sources": ["../../../../../shared/node_modules/@stripe/stripe-js/dist/pure.js", "../../../../../shared/node_modules/@stripe/stripe-js/pure/index.js", "../../../../../shared/node_modules/jquery/dist/jquery.js", "../../../../../shared/node_modules/bootbox/dist/bootbox.js", "../../../../../shared/node_modules/dropzone/dist/dropzone.js", "../../../../../shared/node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/max.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/nil.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/regex.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/validate.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/parse.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/stringify.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/rng.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/v1.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/v1ToV6.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/md5.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/v35.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/v3.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/native.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/v4.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/sha1.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/v5.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/v6.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/v6ToV1.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/v7.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/version.js", "../../../../../shared/node_modules/uuid/dist/cjs-browser/index.js", "../../../../../shared/node_modules/jquery-slimscroll/jquery.slimscroll.js", "../../../../../shared/node_modules/jquery.fancytree/dist/modules/jquery.fancytree.ui-deps.js", "../../../../../shared/node_modules/jquery.fancytree/dist/modules/jquery.fancytree.js", "../../../../../shared/node_modules/jquery.fancytree/dist/skin-win8/ui.fancytree.css", "../../javascript/components/ajax_error_handling.js", "../../../../../shared/node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.js", "../../javascript/components/direct_upload.css", "../../../../../shared/node_modules/bootstrap/js/transition.js", "../../../../../shared/node_modules/bootstrap/js/alert.js", "../../../../../shared/node_modules/bootstrap/js/button.js", "../../../../../shared/node_modules/bootstrap/js/carousel.js", "../../../../../shared/node_modules/bootstrap/js/collapse.js", "../../../../../shared/node_modules/bootstrap/js/dropdown.js", "../../../../../shared/node_modules/bootstrap/js/modal.js", "../../../../../shared/node_modules/bootstrap/js/tooltip.js", "../../../../../shared/node_modules/bootstrap/js/popover.js", "../../../../../shared/node_modules/bootstrap/js/scrollspy.js", "../../../../../shared/node_modules/bootstrap/js/tab.js", "../../../../../shared/node_modules/bootstrap/js/affix.js", "../../../../../shared/node_modules/bootstrap/dist/js/npm.js", "../../../../../shared/node_modules/bootstrap/dist/css/bootstrap.css", "../../javascript/components/bootstrap/bootstrap_print.css", "../../javascript/components/bootstrap/auto-dropup.js", "../../javascript/components/bootstrap/index.js", "../../javascript/components/adminlte/adminlte.js", "../../javascript/components/adminlte/adminlte.css", "../../javascript/components/adminlte/style.scss", "../../javascript/components/adminlte/skin-blue.css", "../../javascript/components/adminlte/skin-blue-light.css", "../../javascript/components/adminlte/skin-yellow.css", "../../javascript/components/adminlte/skin-yellow-light.css", "../../javascript/components/adminlte/search.css", "../../../../../shared/node_modules/font-awesome/css/font-awesome.min.css", "../../javascript/components/adminlte/index.js", "../fonts/fonts.css", "../../javascript/components/bootstrap_confirm.js", "../../javascript/components/scrolling.js", "../../javascript/components/mouse_wait_on_ajax.js", "../../javascript/components/prevent_number_input_scroll.js", "../../javascript/components/datepicker/custom-bs3.scss", "../../../../../shared/node_modules/select2/select2.js", "../../javascript/components/select2/select2_sortable.js", "../../../../../shared/node_modules/select2/select2_locale_de.js", "../../../../../shared/node_modules/select2/select2.css", "../../javascript/components/select2/select2-bootstrap.css", "../../javascript/components/select2/select2-kurso.scss", "../../javascript/components/select2/select2-sortable.css", "../../javascript/components/select2/index.js", "../../../../../shared/node_modules/bootbox/dist/bootbox.locales.js", "../../javascript/components/bootbox.js", "../../../../../shared/node_modules/dropzone/dist/min/dropzone.min.css", "../../../../../shared/node_modules/dropzone/dist/min/basic.min.css", "../../javascript/components/dropzone/dropzone.scss", "../../javascript/components/dropzone/index.js", "../../../../../shared/node_modules/vis-timeline/styles/vis-timeline-graph2d.css", "../../javascript/components/planning_calendar/planning_calendar.scss", "../../javascript/components/search_table.scss", "../../../../../shared/node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/stripe.controller.js", "../../javascript/helpers/index.js", "../../javascript/controllers/email-address.controller.js", "../../javascript/controllers/dropzone.controller.js", "../../javascript/controllers/select-toggle.controller.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/lib/utils.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/lib/date.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/lib/date-format.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/lib/dom.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/lib/event.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/i18n/base-locales.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/options/defaultOptions.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/options/processOptions.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/options/shortcutKeys.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/templates/pickerTemplate.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/templates/daysTemplate.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/templates/weekNumbersTemplate.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/views/View.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/views/DaysView.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/views/MonthsView.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/views/YearsView.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/events/functions.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/events/pickerListeners.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/Picker.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/events/elementListeners.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/events/otherListeners.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/Datepicker.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/i18n/locales/de.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/i18n/locales/en-CA.js", "../../javascript/components/datepicker/locales.js", "../../javascript/controllers/datepicker.controller.js", "../../javascript/controllers/removable.controller.js", "../../../../../shared/node_modules/@stimulus-components/checkbox-select-all/dist/stimulus-checkbox-select-all.mjs", "../../javascript/controllers/checkbox-select-all.controller.js", "../../javascript/controllers/merge-fields.controller.js", "../../javascript/controllers/radio-toggle.controller.js", "../../../../../shared/node_modules/sortablejs/modular/sortable.esm.js", "../../javascript/controllers/sortable.controller.js", "../../javascript/controllers/invoice-item-form.controller.js", "../../../../../shared/node_modules/@stimulus-components/rails-nested-form/dist/stimulus-rails-nested-form.mjs", "../../javascript/controllers/nested-form.controller.js", "../../../../../shared/node_modules/@stimulus-components/reveal/dist/stimulus-reveal-controller.mjs", "../../javascript/controllers/disable.controller.js", "../../javascript/vendor/jquery.js", "../../javascript/vendor/jquery-ui.js", "../../javascript/application.js", "../../javascript/controllers/copy-clipboard.controller.js", "../../javascript/controllers/dropdown-value-counter.controller.js", "../../javascript/controllers/list-search.controller.js", "../../javascript/controllers/address-autocomplete.controller.js", "../../../../../shared/node_modules/vis-timeline/node_modules/style-inject/dist/style-inject.es.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/moment.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/locale/de.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/locale/es.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/locale/fr.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/locale/it.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/locale/ja.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/locale/nl.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/locale/pl.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/locale/ru.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/locale/tr.js", "../../../../../shared/node_modules/vis-timeline/node_modules/moment/locale/uk.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/global-this.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/fails.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/function-bind-native.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/function-apply.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/function-uncurry-this.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/classof-raw.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/function-uncurry-this-clause.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-callable.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/descriptors.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/function-call.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-property-is-enumerable.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/create-property-descriptor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/indexed-object.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-null-or-undefined.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/require-object-coercible.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/to-indexed-object.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-object.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/path.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/get-built-in.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-is-prototype-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/environment-user-agent.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/environment-v8-version.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/symbol-constructor-detection.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/use-symbol-as-uid.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-symbol.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/try-to-string.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/a-callable.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/get-method.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/ordinary-to-primitive.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-pure.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/define-global-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/shared-store.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/shared.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/to-object.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/has-own-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/uid.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/well-known-symbol.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/to-primitive.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/to-property-key.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/document-create-element.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/ie8-dom-define.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-get-own-property-descriptor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-forced.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/function-bind-context.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/v8-prototype-define-bug.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/an-object.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-define-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/create-non-enumerable-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/export.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-array.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/math-trunc.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/to-integer-or-infinity.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/to-length.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/length-of-array-like.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/does-not-exceed-safe-integer.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/create-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/to-string-tag-support.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/classof.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/inspect-source.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-constructor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-species-constructor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-species-create.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-method-has-species-support.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.concat.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/to-string.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/to-absolute-index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-includes.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/hidden-keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-keys-internal.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/enum-bug-keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-define-properties.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/html.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/shared-key.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-create.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-get-own-property-names.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-slice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-get-own-property-names-external.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-get-own-property-symbols.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/define-built-in.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/define-built-in-accessor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/well-known-symbol-wrapped.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/well-known-symbol-define.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/symbol-define-to-primitive.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-to-string.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-to-string-tag.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/weak-map-basic-detection.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/internal-state.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-iteration.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.constructor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/symbol-registry-detection.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.for.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.key-for.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/get-json-replacer-function.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.json.stringify.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.get-own-property-symbols.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.async-dispose.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.async-iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.dispose.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.has-instance.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.match.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.match-all.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.replace.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.search.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.species.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.split.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.to-primitive.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.to-string-tag.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.symbol.unscopables.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.json.to-string-tag.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/symbol/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/add-to-unscopables.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/iterators.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/function-name.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/correct-prototype-getter.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-get-prototype-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/iterators-core.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/iterator-create-constructor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/function-uncurry-this-accessor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-possible-prototype.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/a-possible-prototype.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-set-prototype-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/iterator-define.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/create-iter-result-object.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/dom-iterables.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/web.dom-collections.iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/symbol/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/symbol.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.slice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/get-built-in-prototype-method.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/slice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/slice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/slice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/own-keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.reflect.own-keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/reflect/own-keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/reflect/own-keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/reflect/own-keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.is-array.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/is-array.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/array/is-array.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.date.now.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/date/now.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/date/now.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/date/now.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/function-bind.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.function.bind.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/function/virtual/bind.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/bind.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/bind.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/bind.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-method-is-strict.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-for-each.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.for-each.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/for-each.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/array/virtual/for-each.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/for-each.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.reverse.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/reverse.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/reverse.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/reverse.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/reverse.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-set-length.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/delete-property-or-throw.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.splice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/splice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/splice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/splice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/splice.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-assign.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.assign.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/assign.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/assign.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/assign.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.includes.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/includes.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-regexp.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/not-a-regexp.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/correct-is-regexp-logic.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.string.includes.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/string/virtual/includes.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/includes.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/includes.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/includes.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.get-prototype-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/get-prototype-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/get-prototype-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/get-prototype-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/concat.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/concat.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/concat.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.filter.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/filter.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/filter.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/filter.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-to-array.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.values.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/values.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/values.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/values.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/whitespaces.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/string-trim.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/number-parse-int.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.parse-int.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/parse-int.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/parse-int.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/parse-int.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.index-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/index-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/index-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/index-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.entries.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/entries.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/entries.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/entries.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.create.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/create.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/create.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/create.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/string-repeat.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/string-pad.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/date-to-iso-string.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.date.to-json.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/json/stringify.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/json/stringify.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/environment.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/validate-arguments-length.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/schedulers-fix.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/web.set-interval.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/web.set-timeout.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/web.timers.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/set-timeout.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-fill.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.fill.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/fill.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/fill.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/fill.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/fill.js", "../../../../../shared/node_modules/vis-timeline/node_modules/component-emitter/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@egjs/hammerjs/dist/hammer.esm.js", "../../../../../shared/node_modules/vis-timeline/node_modules/vis-util/esnext/esm/vis-util.mjs", "../../../../../shared/node_modules/vis-timeline/lib/DOMutil.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/get-own-property-symbols.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/get-own-property-symbols.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/get-own-property-descriptor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/get-own-property-descriptor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.get-own-property-descriptors.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/get-own-property-descriptors.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/get-own-property-descriptors.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.define-properties.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/define-properties.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/define-properties.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/define-properties.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.object.define-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/object/define-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/object/define-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/actual/object/define-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/full/object/define-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/features/object/define-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.function.metadata.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.dispose.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.metadata.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/actual/symbol/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/symbol-is-registered.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.is-registered-symbol.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/symbol-is-well-known.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.is-well-known-symbol.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.custom-matcher.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.observable.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.is-registered.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.is-well-known.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.matcher.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.metadata-key.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/esnext.symbol.replace-all.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/full/symbol/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/features/symbol/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/string-multibyte.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.string.iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/symbol/iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/symbol/iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/actual/symbol/iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/full/symbol/iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/features/symbol/iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/helpers/esm/typeof.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/symbol/to-primitive.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/symbol/to-primitive.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/actual/symbol/to-primitive.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/full/symbol/to-primitive.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/features/symbol/to-primitive.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/helpers/esm/toPrimitive.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/helpers/esm/toPropertyKey.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-reduce.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/environment-is-node.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.reduce.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/reduce.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/reduce.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/reduce.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/reduce.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/flatten-into-array.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.flat-map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.unscopables.flat-map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/flat-map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/flat-map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/flat-map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/flat-map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/symbol/iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-buffer-non-extensible.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/object-is-extensible.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/freezing.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/internal-metadata.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/is-array-iterator-method.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/get-iterator-method.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/get-iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/iterator-close.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/iterate.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/an-instance.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/collection.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/define-built-ins.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-species.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/collection-strong.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.map.constructor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/caller.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/map-helpers.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.map.group-by.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/map/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/map/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/map.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.set.constructor.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.set.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/a-set.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-helpers.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/iterate-simple.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-iterate.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-clone.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-size.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/get-iterator-direct.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/get-set-record.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-difference.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-method-accept-set-like.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.set.difference.v2.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-intersection.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.set.intersection.v2.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-is-disjoint-from.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.set.is-disjoint-from.v2.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-is-subset-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.set.is-subset-of.v2.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-is-superset-of.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.set.is-superset-of.v2.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-symmetric-difference.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-method-get-keys-before-cloning-detection.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.set.symmetric-difference.v2.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/set-union.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.set.union.v2.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/set/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/set/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/set.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/get-iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/get-iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/actual/get-iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/full/get-iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/features/get-iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js/get-iterator.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/array-sort.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/environment-ff-version.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/environment-is-ie-or-edge.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/environment-webkit-version.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.sort.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/sort.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/sort.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/sort.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.some.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/some.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/some.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/some.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/some.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/array/virtual/keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/keys.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/values.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/array/virtual/values.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/values.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/values.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/entries.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/array/virtual/entries.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/entries.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/entries.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js", "../../../../../shared/node_modules/vis-timeline/node_modules/uuid/dist/stringify.js", "../../../../../shared/node_modules/vis-timeline/node_modules/uuid/dist/rng.js", "../../../../../shared/node_modules/vis-timeline/node_modules/uuid/dist/v4.js", "../../../../../shared/node_modules/vis-timeline/node_modules/vis-data/esnext/esm/vis-data.mjs", "../../../../../shared/node_modules/vis-timeline/lib/module/moment.js", "../../../../../shared/node_modules/vis-timeline/node_modules/cssfilter/lib/default.js", "../../../../../shared/node_modules/vis-timeline/node_modules/cssfilter/lib/util.js", "../../../../../shared/node_modules/vis-timeline/node_modules/cssfilter/lib/parser.js", "../../../../../shared/node_modules/vis-timeline/node_modules/cssfilter/lib/css.js", "../../../../../shared/node_modules/vis-timeline/node_modules/cssfilter/lib/index.js", "../../../../../shared/node_modules/vis-timeline/node_modules/xss/lib/util.js", "../../../../../shared/node_modules/vis-timeline/node_modules/xss/lib/default.js", "../../../../../shared/node_modules/vis-timeline/node_modules/xss/lib/parser.js", "../../../../../shared/node_modules/vis-timeline/node_modules/xss/lib/xss.js", "../../../../../shared/node_modules/vis-timeline/node_modules/xss/lib/index.js", "../../../../../shared/node_modules/vis-timeline/lib/util.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/internals/number-parse-float.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.parse-float.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/parse-float.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/parse-float.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/parse-float.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/Component.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.string.repeat.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/string/virtual/repeat.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/repeat.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/repeat.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/repeat.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/DateUtil.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/Range.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/set-interval.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/set-interval.js", "../../../../../shared/node_modules/vis-timeline/node_modules/propagating-hammerjs/src/propagating.js", "../../../../../shared/node_modules/vis-timeline/lib/module/hammer.js", "../../../../../shared/node_modules/vis-timeline/lib/hammerUtil.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/TimeStep.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/TimeAxis.js", "../../../../../shared/node_modules/vis-timeline/node_modules/keycharm/src/keycharm.js", "../../../../../shared/node_modules/vis-timeline/lib/shared/Activator.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/locales.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/CustomTime.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/Core.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/CurrentTime.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.find.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/find.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/find.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/find.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/find.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/Stack.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/Group.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/BackgroundGroup.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/item/Item.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/item/BoxItem.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/item/PointItem.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/item/RangeItem.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/item/BackgroundItem.js", "../../../../../shared/node_modules/vis-timeline/lib/shared/Popup.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/modules/es.array.every.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/array/virtual/every.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/es/instance/every.js", "../../../../../shared/node_modules/vis-timeline/node_modules/core-js-pure/stable/instance/every.js", "../../../../../shared/node_modules/vis-timeline/node_modules/@babel/runtime-corejs3/core-js-stable/instance/every.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/item/ClusterItem.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/ClusterGenerator.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/ItemSet.js", "../../../../../shared/node_modules/vis-timeline/lib/shared/Validator.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/optionsTimeline.js", "../../../../../shared/node_modules/vis-timeline/lib/shared/ColorPicker.js", "../../../../../shared/node_modules/vis-timeline/lib/shared/Configurator.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/Timeline.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/DataScale.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/DataAxis.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/graph2d_types/points.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/graph2d_types/bar.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/graph2d_types/line.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/GraphGroup.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/Legend.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/component/LineGraph.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/optionsGraph2d.js", "../../../../../shared/node_modules/vis-timeline/lib/timeline/Graph2d.js", "../../../../../shared/node_modules/vis-timeline/lib/entry-standalone.js", "../../javascript/components/planning_calendar/event-adapter.js", "../../javascript/controllers/planning-calendar.controller.js", "../../javascript/controllers/tariff-rows.controller.js", "../../javascript/controllers/tariff-template-copy.controller.js", "../../javascript/controllers/tariff-select.controller.js", "../../javascript/controllers/tariff-mode.controller.js", "../../javascript/controllers/bulk-reservation-invite.controller.js", "../../javascript/controllers/device-class.controller.js", "../../javascript/helpers/search_params.js", "../../javascript/controllers/burnoutable-table.controller.js", "../../javascript/controllers/scroll-sync.controller.js", "../../javascript/helpers/url_params.js", "../../javascript/controllers/search-view.controller.js", "../../javascript/controllers/column-picker.controller.js", "../../../../../shared/node_modules/date-fns/constants.js", "../../../../../shared/node_modules/date-fns/constructFrom.js", "../../../../../shared/node_modules/date-fns/toDate.js", "../../../../../shared/node_modules/date-fns/addDays.js", "../../../../../shared/node_modules/date-fns/addMonths.js", "../../../../../shared/node_modules/date-fns/_lib/defaultOptions.js", "../../../../../shared/node_modules/date-fns/startOfWeek.js", "../../../../../shared/node_modules/date-fns/startOfISOWeek.js", "../../../../../shared/node_modules/date-fns/getISOWeekYear.js", "../../../../../shared/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js", "../../../../../shared/node_modules/date-fns/_lib/normalizeDates.js", "../../../../../shared/node_modules/date-fns/startOfDay.js", "../../../../../shared/node_modules/date-fns/differenceInCalendarDays.js", "../../../../../shared/node_modules/date-fns/startOfISOWeekYear.js", "../../../../../shared/node_modules/date-fns/addWeeks.js", "../../../../../shared/node_modules/date-fns/addYears.js", "../../../../../shared/node_modules/date-fns/isDate.js", "../../../../../shared/node_modules/date-fns/isValid.js", "../../../../../shared/node_modules/date-fns/endOfMonth.js", "../../../../../shared/node_modules/date-fns/startOfQuarter.js", "../../../../../shared/node_modules/date-fns/startOfMonth.js", "../../../../../shared/node_modules/date-fns/endOfYear.js", "../../../../../shared/node_modules/date-fns/startOfYear.js", "../../../../../shared/node_modules/date-fns/endOfWeek.js", "../../../../../shared/node_modules/date-fns/endOfQuarter.js", "../../../../../shared/node_modules/date-fns/locale/en-US/_lib/formatDistance.js", "../../../../../shared/node_modules/date-fns/locale/_lib/buildFormatLongFn.js", "../../../../../shared/node_modules/date-fns/locale/en-US/_lib/formatLong.js", "../../../../../shared/node_modules/date-fns/locale/en-US/_lib/formatRelative.js", "../../../../../shared/node_modules/date-fns/locale/_lib/buildLocalizeFn.js", "../../../../../shared/node_modules/date-fns/locale/en-US/_lib/localize.js", "../../../../../shared/node_modules/date-fns/locale/_lib/buildMatchFn.js", "../../../../../shared/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js", "../../../../../shared/node_modules/date-fns/locale/en-US/_lib/match.js", "../../../../../shared/node_modules/date-fns/locale/en-US.js", "../../../../../shared/node_modules/date-fns/getDayOfYear.js", "../../../../../shared/node_modules/date-fns/getISOWeek.js", "../../../../../shared/node_modules/date-fns/getWeekYear.js", "../../../../../shared/node_modules/date-fns/startOfWeekYear.js", "../../../../../shared/node_modules/date-fns/getWeek.js", "../../../../../shared/node_modules/date-fns/_lib/addLeadingZeros.js", "../../../../../shared/node_modules/date-fns/_lib/format/lightFormatters.js", "../../../../../shared/node_modules/date-fns/_lib/format/formatters.js", "../../../../../shared/node_modules/date-fns/_lib/format/longFormatters.js", "../../../../../shared/node_modules/date-fns/_lib/protectedTokens.js", "../../../../../shared/node_modules/date-fns/format.js", "../../javascript/controllers/relative-date.controller.js", "../../javascript/controllers/sticky-table-header.controller.js", "../../javascript/controllers/lazy-loading.controller.js", "../../javascript/controllers/number-range-preview.controller.js"],
  "sourcesContent": ["'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nvar V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\nvar findScript = function findScript() {\n  var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n  for (var i = 0; i < scripts.length; i++) {\n    var script = scripts[i];\n\n    if (!V3_URL_REGEX.test(script.src)) {\n      continue;\n    }\n\n    return script;\n  }\n\n  return null;\n};\n\nvar injectScript = function injectScript(params) {\n  var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n  var script = document.createElement('script');\n  script.src = \"\".concat(V3_URL).concat(queryString);\n  var headOrBody = document.head || document.body;\n\n  if (!headOrBody) {\n    throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');\n  }\n\n  headOrBody.appendChild(script);\n  return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n  if (!stripe || !stripe._registerWrapper) {\n    return;\n  }\n\n  stripe._registerWrapper({\n    name: 'stripe-js',\n    version: \"4.1.0\",\n    startTime: startTime\n  });\n};\n\nvar stripePromise = null;\nvar onErrorListener = null;\nvar onLoadListener = null;\n\nvar onError = function onError(reject) {\n  return function () {\n    reject(new Error('Failed to load Stripe.js'));\n  };\n};\n\nvar onLoad = function onLoad(resolve, reject) {\n  return function () {\n    if (window.Stripe) {\n      resolve(window.Stripe);\n    } else {\n      reject(new Error('Stripe.js not available'));\n    }\n  };\n};\n\nvar loadScript = function loadScript(params) {\n  // Ensure that we only attempt to load Stripe.js at most once\n  if (stripePromise !== null) {\n    return stripePromise;\n  }\n\n  stripePromise = new Promise(function (resolve, reject) {\n    if (typeof window === 'undefined' || typeof document === 'undefined') {\n      // Resolve to null when imported server side. This makes the module\n      // safe to import in an isomorphic code base.\n      resolve(null);\n      return;\n    }\n\n    if (window.Stripe && params) {\n      console.warn(EXISTING_SCRIPT_MESSAGE);\n    }\n\n    if (window.Stripe) {\n      resolve(window.Stripe);\n      return;\n    }\n\n    try {\n      var script = findScript();\n\n      if (script && params) {\n        console.warn(EXISTING_SCRIPT_MESSAGE);\n      } else if (!script) {\n        script = injectScript(params);\n      } else if (script && onLoadListener !== null && onErrorListener !== null) {\n        var _script$parentNode;\n\n        // remove event listeners\n        script.removeEventListener('load', onLoadListener);\n        script.removeEventListener('error', onErrorListener); // if script exists, but we are reloading due to an error,\n        // reload script to trigger 'load' event\n\n        (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);\n        script = injectScript(params);\n      }\n\n      onLoadListener = onLoad(resolve, reject);\n      onErrorListener = onError(reject);\n      script.addEventListener('load', onLoadListener);\n      script.addEventListener('error', onErrorListener);\n    } catch (error) {\n      reject(error);\n      return;\n    }\n  }); // Resets stripePromise on error\n\n  return stripePromise[\"catch\"](function (error) {\n    stripePromise = null;\n    return Promise.reject(error);\n  });\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n  if (maybeStripe === null) {\n    return null;\n  }\n\n  var stripe = maybeStripe.apply(undefined, args);\n  registerWrapper(stripe, startTime);\n  return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nvar validateLoadParams = function validateLoadParams(params) {\n  var errorMessage = \"invalid load parameters; expected object of shape\\n\\n    {advancedFraudSignals: boolean}\\n\\nbut received\\n\\n    \".concat(JSON.stringify(params), \"\\n\");\n\n  if (params === null || _typeof(params) !== 'object') {\n    throw new Error(errorMessage);\n  }\n\n  if (Object.keys(params).length === 1 && typeof params.advancedFraudSignals === 'boolean') {\n    return params;\n  }\n\n  throw new Error(errorMessage);\n};\n\nvar loadParams;\nvar loadStripeCalled = false;\nvar loadStripe = function loadStripe() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  loadStripeCalled = true;\n  var startTime = Date.now();\n  return loadScript(loadParams).then(function (maybeStripe) {\n    return initStripe(maybeStripe, args, startTime);\n  });\n};\n\nloadStripe.setLoadParameters = function (params) {\n  // we won't throw an error if setLoadParameters is called with the same values as before\n  if (loadStripeCalled && loadParams) {\n    var validatedParams = validateLoadParams(params);\n    var parameterKeys = Object.keys(validatedParams);\n    var sameParameters = parameterKeys.reduce(function (previousValue, currentValue) {\n      var _loadParams;\n\n      return previousValue && params[currentValue] === ((_loadParams = loadParams) === null || _loadParams === void 0 ? void 0 : _loadParams[currentValue]);\n    }, true);\n\n    if (sameParameters) {\n      return;\n    }\n  }\n\n  if (loadStripeCalled) {\n    throw new Error('You cannot change load parameters after calling loadStripe');\n  }\n\n  loadParams = validateLoadParams(params);\n};\n\nexports.loadStripe = loadStripe;\n", "module.exports = require('../dist/pure');\n", "/*!\n * jQuery JavaScript Library v2.2.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:23Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\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\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\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\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\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\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\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\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\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\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\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\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\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\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\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\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\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\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\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};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\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}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n", "/*! @preserve\r\n * bootbox.js\r\n * version: 6.0.4\r\n * author: Nick Payne <nick@kurai.co.uk>\r\n * license: MIT\r\n * http://bootboxjs.com/\r\n */\r\n(function (root, factory) {\r\n  'use strict';\r\n  if (typeof define === 'function' && define.amd) {\r\n    // AMD\r\n    define(['jquery'], factory);\r\n  } else if (typeof exports === 'object') {\r\n    // Node, CommonJS-like\r\n    module.exports = factory(require('jquery'));\r\n  } else {\r\n    // Browser globals (root is window)\r\n    root.bootbox = factory(root.jQuery);\r\n  }\r\n}(this, function init($, undefined) {\r\n  'use strict';\r\n\r\n  let exports = {};\r\n\r\n  let VERSION = '6.0.4';\r\n  exports.VERSION = VERSION;\r\n\r\n  let locales = {\r\n    'en' : {\r\n      OK      : 'OK',\r\n      CANCEL  : 'Cancel',\r\n      CONFIRM : 'OK'\r\n    }\r\n  };\r\n\r\n  let templates = {\r\n    dialog:         '<div class=\"bootbox modal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"><div class=\"modal-dialog\"><div class=\"modal-content\"><div class=\"modal-body\"><div class=\"bootbox-body\"></div></div></div></div></div>',\r\n    header:         '<div class=\"modal-header\"><h5 class=\"modal-title\"></h5></div>',\r\n    footer:         '<div class=\"modal-footer\"></div>',\r\n    closeButton:    '<button type=\"button\" class=\"bootbox-close-button close btn-close\" aria-hidden=\"true\" aria-label=\"Close\"></button>',\r\n    form:           '<form class=\"bootbox-form\"></form>',\r\n    button:         '<button type=\"button\" class=\"btn\"></button>',\r\n    option:         '<option value=\"\"></option>',\r\n    promptMessage:  '<div class=\"bootbox-prompt-message\"></div>',\r\n    inputs: {\r\n      text:         '<input class=\"bootbox-input bootbox-input-text form-control\" autocomplete=\"off\" type=\"text\" />',\r\n      textarea:     '<textarea class=\"bootbox-input bootbox-input-textarea form-control\"></textarea>',\r\n      email:        '<input class=\"bootbox-input bootbox-input-email form-control\" autocomplete=\"off\" type=\"email\" />',\r\n      select:       '<select class=\"bootbox-input bootbox-input-select form-select\"></select>',\r\n      checkbox:     '<div class=\"form-check checkbox\"><label class=\"form-check-label\"><input class=\"form-check-input bootbox-input bootbox-input-checkbox\" type=\"checkbox\" /></label></div>',\r\n      radio:        '<div class=\"form-check radio\"><label class=\"form-check-label\"><input class=\"form-check-input bootbox-input bootbox-input-radio\" type=\"radio\" name=\"bootbox-radio\" /></label></div>',\r\n      date:         '<input class=\"bootbox-input bootbox-input-date form-control\" autocomplete=\"off\" type=\"date\" />',\r\n      time:         '<input class=\"bootbox-input bootbox-input-time form-control\" autocomplete=\"off\" type=\"time\" />',\r\n      number:       '<input class=\"bootbox-input bootbox-input-number form-control\" autocomplete=\"off\" type=\"number\" />',\r\n      password:     '<input class=\"bootbox-input bootbox-input-password form-control\" autocomplete=\"off\" type=\"password\" />',\r\n      range:        '<input class=\"bootbox-input bootbox-input-range form-control-range\" autocomplete=\"off\" type=\"range\" />'\r\n    }\r\n  };\r\n\r\n\r\n  let defaults = {\r\n    // Default language used when generating buttons for alert, confirm, and prompt dialogs\r\n    locale: 'en',\r\n    // Show backdrop or not. Default to static so user has to interact with dialog\r\n    backdrop: 'static',\r\n    // Animate the modal in/out\r\n    animate: true,\r\n    // Additional class string applied to the top level dialog\r\n    className: null,\r\n    // Whether or not to include a close button\r\n    closeButton: true,\r\n    // Show the dialog immediately by default\r\n    show: true,\r\n    // Dialog container\r\n    container: 'body',\r\n    // Default value (used by the prompt helper)\r\n    value: '',\r\n    // Default input type (used by the prompt helper)\r\n    inputType: 'text',\r\n    // Custom error message to report if prompt fails validation\r\n    errorMessage: null,\r\n    // Switch button order from cancel/confirm (default) to confirm/cancel\r\n    swapButtonOrder: false,\r\n    // Center modal vertically in page\r\n    centerVertical: false,\r\n    // Append \"multiple\" property to the select when using the \"prompt\" helper\r\n    multiple: false,\r\n    // Automatically scroll modal content when height exceeds viewport height\r\n    scrollable: false,\r\n    // Whether or not to destroy the modal on hide\r\n    reusable: false,\r\n    // The element which triggered the dialog\r\n    relatedTarget: null,\r\n    // The size of the modal to generate\r\n    size: null,\r\n    // A unique identifier for this modal\r\n    id: null\r\n  };\r\n\r\n\r\n  // PUBLIC FUNCTIONS\r\n  // *************************************************************************************************************\r\n\r\n  /**\r\n   * Return all currently registered locales, or a specific locale if \"name\" is defined\r\n   * @param {string} [name]\r\n   * @returns {(Object|Object[])} An array of the available locale objects, or a single locale object if {name} is not null\r\n   */\r\n  exports.locales = function (name) {\r\n    return name ? locales[name] : locales;\r\n  };\r\n\r\n\r\n  /**\r\n   * Register localized strings for the OK, CONFIRM, and CANCEL buttons\r\n   * @param {string} name - The key used to identify the new locale in the locales array\r\n   * @param {Object} values - An object containing the localized string for each of the OK, CANCEL, and CONFIRM properties of a locale\r\n   * @returns The updated bootbox object\r\n   */\r\n  exports.addLocale = function (name, values) {\r\n    $.each(['OK', 'CANCEL', 'CONFIRM'], function (_, v) {\r\n      if (!values[v]) {\r\n        throw new Error('Please supply a translation for \"' + v + '\"');\r\n      }\r\n    });\r\n\r\n    locales[name] = {\r\n      OK: values.OK,\r\n      CANCEL: values.CANCEL,\r\n      CONFIRM: values.CONFIRM\r\n    };\r\n\r\n    return exports;\r\n  };\r\n\r\n \r\n  /**\r\n   * Remove a previously-registered locale\r\n   * @param {string} name - The key identifying the locale to remove\r\n   * @returns The updated bootbox object\r\n   */\r\n  exports.removeLocale = function (name) {\r\n    if (name !== 'en') {\r\n      delete locales[name];\r\n    }\r\n    else {\r\n      throw new Error('\"en\" is used as the default and fallback locale and cannot be removed.');\r\n    }\r\n\r\n    return exports;\r\n  };\r\n\r\n\r\n  /**\r\n   * Set the default locale\r\n   * @param {string} name - The key identifying the locale to set as the default locale for all future bootbox calls \r\n   * @returns The updated bootbox object\r\n   */\r\n  exports.setLocale = function (name) {\r\n    return exports.setDefaults('locale', name);\r\n  };\r\n\r\n\r\n  /**\r\n   * Override default value(s) of Bootbox.\r\n   * @returns The updated bootbox object\r\n   */\r\n  exports.setDefaults = function () {\r\n    let values = {};\r\n\r\n    if (arguments.length === 2) {\r\n      // Allow passing of single key/value...\r\n      values[arguments[0]] = arguments[1];\r\n    } else {\r\n      // ... and as an object too\r\n      values = arguments[0];\r\n    }\r\n\r\n    $.extend(defaults, values);\r\n\r\n    return exports;\r\n  };\r\n\r\n\r\n  /**\r\n   * Hides all currently active Bootbox modals\r\n   * @returns The current bootbox object\r\n   */\r\n  exports.hideAll = function () {\r\n    $('.bootbox').modal('hide');\r\n\r\n    return exports;\r\n  };\r\n\r\n \r\n  /**\r\n   * Allows the base init() function to be overridden\r\n   * @param {function} _$ - A function to be called when the bootbox instance is created\r\n   * @returns The current bootbox object\r\n   */\r\n  exports.init = function (_$) {\r\n    return init(_$ || $);\r\n  };\r\n\r\n\r\n  // CORE HELPER FUNCTIONS\r\n  // *************************************************************************************************************\r\n\r\n  /**\r\n   * The core dialog helper function, which can be used to create any custom Bootstrap modal. \r\n   * @param {Object} options - An object used to configure the various properties which define a Bootbox dialog\r\n   * @returns A jQuery object upon which Bootstrap's modal function has been called\r\n   */\r\n  exports.dialog = function (options) {\r\n    if ($.fn.modal === undefined) {\r\n      throw new Error(\r\n        '\"$.fn.modal\" is not defined; please double check you have included the Bootstrap JavaScript library. See https://getbootstrap.com/docs/5.3/getting-started/introduction/ for more details.'\r\n      );\r\n    }\r\n\r\n    options = sanitize(options);\r\n\r\n    if ($.fn.modal.Constructor.VERSION) {\r\n      options.fullBootstrapVersion = $.fn.modal.Constructor.VERSION;\r\n      let i = options.fullBootstrapVersion.indexOf('.');\r\n      options.bootstrap = options.fullBootstrapVersion.substring(0, i);\r\n    }\r\n    else {\r\n      // Assuming version 2.3.2, as that was the last \"supported\" 2.x version\r\n      options.bootstrap = '2';\r\n      options.fullBootstrapVersion = '2.3.2';\r\n      console.warn('Bootbox will *mostly* work with Bootstrap 2, but we do not officially support it. Please upgrade, if possible.');\r\n    }\r\n\r\n    let dialog = $(templates.dialog);\r\n    let innerDialog = dialog.find('.modal-dialog');\r\n    let body = dialog.find('.modal-body');\r\n    let header = $(templates.header);\r\n    let footer = $(templates.footer);\r\n    let buttons = options.buttons;\r\n\r\n    let callbacks = {\r\n      onEscape: options.onEscape\r\n    };\r\n\r\n    body.find('.bootbox-body').html(options.message);\r\n\r\n    // Only attempt to create buttons if at least one has been defined in the options object\r\n    if (getKeyLength(options.buttons) > 0) {\r\n      each(buttons, function (key, b) {\r\n        let button = $(templates.button);\r\n        button.data('bb-handler', key);\r\n        button.addClass(b.className);\r\n\r\n        switch (key) {\r\n          case 'ok':\r\n          case 'confirm':\r\n            button.addClass('bootbox-accept');\r\n            break;\r\n\r\n          case 'cancel':\r\n            button.addClass('bootbox-cancel');\r\n            break;\r\n        }\r\n\r\n        button.html(b.label);\r\n\r\n        if (b.id) {\r\n          button.attr({ 'id': b.id });\r\n        }\r\n\r\n        if (b.disabled === true) {\r\n          button.prop({ disabled: true });\r\n        }\r\n\r\n        footer.append(button);\r\n\r\n        callbacks[key] = b.callback;\r\n      });\r\n\r\n      body.after(footer);\r\n    }\r\n\r\n    if (options.animate === true) {\r\n      dialog.addClass('fade');\r\n    }\r\n\r\n    if (options.className) {\r\n      dialog.addClass(options.className);\r\n    }\r\n\r\n    if (options.id) {\r\n      dialog.attr({ 'id': options.id });\r\n    }\r\n\r\n    if (options.size) {\r\n      // Requires Bootstrap 3.1.0 or higher\r\n      if (options.fullBootstrapVersion.substring(0, 3) < '3.1') {\r\n        console.warn('\"size\" requires Bootstrap 3.1.0 or higher. You appear to be using ' + options.fullBootstrapVersion + '. Please upgrade to use this option.');\r\n      }\r\n\r\n      switch (options.size) {\r\n        case 'small':\r\n        case 'sm':\r\n          innerDialog.addClass('modal-sm');\r\n          break;\r\n\r\n        case 'large':\r\n        case 'lg':\r\n          innerDialog.addClass('modal-lg');\r\n          break;\r\n\r\n        case 'extra-large':\r\n        case 'xl':\r\n          innerDialog.addClass('modal-xl');\r\n\r\n          // Requires Bootstrap 4.2.0 or higher\r\n          if (options.fullBootstrapVersion.substring(0, 3) < '4.2') {\r\n            console.warn('Using size \"xl\"/\"extra-large\" requires Bootstrap 4.2.0 or higher. You appear to be using ' + options.fullBootstrapVersion + '. Please upgrade to use this option.');\r\n          }\r\n          break;\r\n      }\r\n    }\r\n\r\n    if (options.scrollable) {\r\n      innerDialog.addClass('modal-dialog-scrollable');\r\n\r\n      // Requires Bootstrap 4.3.0 or higher\r\n      if (options.fullBootstrapVersion.substring(0, 3) < '4.3') {\r\n        console.warn('Using \"scrollable\" requires Bootstrap 4.3.0 or higher. You appear to be using ' + options.fullBootstrapVersion + '. Please upgrade to use this option.');\r\n      }\r\n    }\r\n\r\n    if(options.title || options.closeButton) {\r\n      if (options.title) {\r\n        header.find('.modal-title').html(options.title);\r\n      }\r\n      else {\r\n        header.addClass('border-0');\r\n      }\r\n\r\n      if (options.closeButton) {\r\n        let closeButton = $(templates.closeButton);      \r\n        if (options.bootstrap < 5) {\r\n          closeButton.html('&times;');\r\n        }\r\n\r\n        /* Note: the close button for Bootstrap 5+ does not contain content */\r\n        if(options.bootstrap < 4) {\r\n          /* Bootstrap 3 and under */\r\n          header.prepend(closeButton);\r\n        }\r\n        else {\r\n          header.append(closeButton);\r\n        }\r\n      }\r\n\r\n      body.before(header);\r\n    }\r\n\r\n    if (options.centerVertical) {\r\n      innerDialog.addClass('modal-dialog-centered');\r\n\r\n      // Requires Bootstrap 4.0.0-beta.3 or higher\r\n      if (options.fullBootstrapVersion < '4.0.0') {\r\n        console.warn('\"centerVertical\" requires Bootstrap 4.0.0-beta.3 or higher. You appear to be using ' + options.fullBootstrapVersion + '. Please upgrade to use this option.');\r\n      }\r\n    }\r\n\r\n    // Bootstrap event listeners; these handle extra setup & teardown required after the underlying modal has performed certain actions.\r\n\r\n    if(!options.reusable) {\r\n      // make sure we unbind any listeners once the dialog has definitively been dismissed\r\n      dialog.one('hide.bs.modal', { dialog: dialog }, unbindModal);\r\n      dialog.one('hidden.bs.modal', { dialog: dialog }, destroyModal);\r\n    }\r\n\r\n    if (options.onHide) {\r\n      if (typeof options.onHide === 'function') {\r\n        dialog.on('hide.bs.modal', options.onHide);\r\n      }\r\n      else {\r\n        throw new Error('Argument supplied to \"onHide\" must be a function');\r\n      }\r\n    }\r\n\r\n    if (options.onHidden) {\r\n      if (typeof options.onHidden === 'function') {\r\n        dialog.on('hidden.bs.modal', options.onHidden);\r\n      }\r\n      else {\r\n        throw new Error('Argument supplied to \"onHidden\" must be a function');\r\n      }\r\n    }\r\n\r\n    if (options.onShow) {\r\n      if (typeof options.onShow === 'function') {\r\n        dialog.on('show.bs.modal', options.onShow);\r\n      }\r\n      else {\r\n        throw new Error('Argument supplied to \"onShow\" must be a function');\r\n      }\r\n    }\r\n\r\n    dialog.one('shown.bs.modal', { dialog: dialog }, focusPrimaryButton);\r\n\r\n    if (options.onShown) {\r\n      if (typeof options.onShown === 'function') {\r\n        dialog.on('shown.bs.modal', options.onShown);\r\n      }\r\n      else {\r\n        throw new Error('Argument supplied to \"onShown\" must be a function');\r\n      }\r\n    }\r\n\r\n    // Bootbox event listeners; used to decouple some behaviours from their respective triggers\r\n\r\n    if (options.backdrop === true) {\r\n      let startedOnBody = false;\r\n\r\n      // Prevents the event from propagating to the backdrop, when something inside the dialog is clicked\r\n      dialog.on('mousedown', '.modal-content', function(e) {\r\n        e.stopPropagation();\r\n\r\n        startedOnBody = true;\r\n      });\r\n\r\n      // A boolean true/false according to the Bootstrap docs should show a dialog the user can dismiss by clicking on the background.\r\n      // We always only ever pass static/false to the actual $.modal function because with \"true\" we can't trap this event (the .modal-backdrop swallows it).\r\n      // However, we still want to sort-of respect true and invoke the escape mechanism instead\r\n      dialog.on('click.dismiss.bs.modal', function (e) {\r\n        if (startedOnBody || e.target !== e.currentTarget) {\r\n          return;\r\n        }\r\n\r\n        dialog.trigger('escape.close.bb');\r\n      });\r\n    }\r\n\r\n    dialog.on('escape.close.bb', function (e) {\r\n      // The if() statement looks redundant but it isn't; without it, if we *didn't* have an onEscape handler then processCallback would automatically dismiss the dialog\r\n      if (callbacks.onEscape) {\r\n        processCallback(e, dialog, callbacks.onEscape);\r\n      }\r\n    });\r\n\r\n    dialog.on('click', '.modal-footer button:not(.disabled)', function (e) {\r\n      let callbackKey = $(this).data('bb-handler');\r\n\r\n      if (callbackKey !== undefined) {\r\n        // Only process callbacks for buttons we recognize:\r\n        processCallback(e, dialog, callbacks[callbackKey]);\r\n      }\r\n    });\r\n\r\n    dialog.on('click', '.bootbox-close-button', function (e) {\r\n      // onEscape might be falsy, but that's fine; the fact is if the user has managed to click the close button we have to close the dialog, callback or not\r\n      processCallback(e, dialog, callbacks.onEscape);\r\n    });\r\n\r\n    dialog.on('keyup', function (e) {\r\n      if (e.which === 27) {\r\n        dialog.trigger('escape.close.bb');\r\n      }\r\n    });\r\n\r\n    /*\r\n    The remainder of this method simply deals with adding our dialog element to the DOM, augmenting it with \r\n    Bootstrap's modal functionality and then giving the resulting object back to our caller\r\n    */\r\n\r\n    $(options.container).append(dialog);\r\n\r\n    dialog.modal({\r\n      backdrop: options.backdrop,\r\n      keyboard: false,\r\n      show: false\r\n    });\r\n\r\n    if (options.show) {\r\n      dialog.modal('show', options.relatedTarget);\r\n    }\r\n\r\n    return dialog;\r\n  };\r\n\r\n\r\n  /**\r\n   * Helper function to simulate the native alert() behavior. **NOTE**: This is non-blocking, so any code that must happen after the alert is dismissed should be placed within the callback function for this alert.\r\n   * @returns  A jQuery object upon which Bootstrap's modal function has been called\r\n   */\r\n  exports.alert = function () {\r\n    let options;\r\n\r\n    options = mergeDialogOptions('alert', ['ok'], ['message', 'callback'], arguments);\r\n\r\n    // @TODO: can this move inside exports.dialog when we're iterating over each button and checking its button.callback value instead?\r\n    if (options.callback && typeof options.callback !== 'function') {\r\n      throw new Error('alert requires the \"callback\" property to be a function when provided');\r\n    }\r\n\r\n    // Override the ok and escape callback to make sure they just invoke the single user-supplied one (if provided)\r\n    options.buttons.ok.callback = options.onEscape = function () {\r\n      if (typeof options.callback  === 'function') {\r\n        return options.callback.call(this);\r\n      }\r\n\r\n      return true;\r\n    };\r\n\r\n    return exports.dialog(options);\r\n  };\r\n\r\n\r\n  /**\r\n   * Helper function to simulate the native confirm() behavior. **NOTE**: This is non-blocking, so any code that must happen after the confirm is dismissed should be placed within the callback function for this confirm.\r\n   * @returns A jQuery object upon which Bootstrap's modal function has been called\r\n   */\r\n  exports.confirm = function () {\r\n    let options;\r\n\r\n    options = mergeDialogOptions('confirm', ['cancel', 'confirm'], ['message', 'callback'], arguments);\r\n\r\n    // confirm specific validation; they don't make sense without a callback so make sure it's present\r\n    if (typeof options.callback !== 'function') {\r\n      throw new Error('confirm requires a callback');\r\n    }\r\n\r\n    // Overrides; undo anything the user tried to set they shouldn't have\r\n    options.buttons.cancel.callback = options.onEscape = function () {\r\n      return options.callback.call(this, false);\r\n    };\r\n\r\n    options.buttons.confirm.callback = function () {\r\n      return options.callback.call(this, true);\r\n    };\r\n\r\n    return exports.dialog(options);\r\n  };\r\n\r\n\r\n  /**\r\n   * Helper function to simulate the native prompt() behavior. **NOTE**: This is non-blocking, so any code that must happen after the prompt is dismissed should be placed within the callback function for this prompt.\r\n   * @returns A jQuery object upon which Bootstrap's modal function has been called\r\n   */\r\n  exports.prompt = function () {\r\n    let options;\r\n    let promptDialog;\r\n    let form;\r\n    let input;\r\n    let shouldShow;\r\n    let inputOptions;\r\n\r\n    // We have to create our form first, otherwise its value is undefined when gearing up our options.\r\n    // @TODO this could be solved by allowing message to be a function instead...\r\n    form = $(templates.form);\r\n\r\n    // prompt defaults are more complex than others in that users can override more defaults\r\n    options = mergeDialogOptions('prompt', ['cancel', 'confirm'], ['title', 'callback'], arguments);\r\n\r\n    if (!options.value) {\r\n      options.value = defaults.value;\r\n    }\r\n\r\n    if (!options.inputType) {\r\n      options.inputType = defaults.inputType;\r\n    }\r\n\r\n    // Capture the user's 'show' value; we always set this to false before spawning the dialog to give us a chance to attach some handlers to it, but we need to make sure we respect a preference not to show it\r\n    shouldShow = (options.show === undefined) ? defaults.show : options.show;\r\n\r\n    // This is required prior to calling the dialog builder below - we need to add an event handler just before the prompt is shown\r\n    options.show = false;\r\n\r\n    // Handles the 'cancel' action\r\n    options.buttons.cancel.callback = options.onEscape = function () {\r\n      return options.callback.call(this, null);\r\n    };\r\n\r\n    // Prompt submitted - extract the prompt value. This requires a bit of work, given the different input types available.\r\n    options.buttons.confirm.callback = function () {\r\n      let value;\r\n\r\n      if (options.inputType === 'checkbox') {\r\n        value = input.find('input:checked').map(function () {\r\n          return $(this).val();\r\n        }).get();\r\n        if(value.length === 0 && options.required === true) {\r\n            // prevents button callback from being called if no checkboxes have been checked\r\n            return false;\r\n        }\r\n      } else if (options.inputType === 'radio') {\r\n        value = input.find('input:checked').val();\r\n      }\r\n      else {\r\n        let el = input[0];\r\n        \r\n        if (el.checkValidity && !el.checkValidity()) {\r\n          // If a custom error message was provided, add it now\r\n          if(options.errorMessage){\r\n            el.setCustomValidity(options.errorMessage);\r\n          }\r\n          \r\n          if(el.reportValidity) { \r\n            el.reportValidity();\r\n          }\r\n\r\n          // prevents button callback from being called\r\n          return false;\r\n        } else {\r\n          if (options.inputType === 'select' && options.multiple === true) {\r\n            value = input.find('option:selected').map(function () {\r\n              return $(this).val();\r\n            }).get();\r\n          }\r\n          else {\r\n            value = input.val();\r\n          }\r\n        }\r\n      }\r\n\r\n      return options.callback.call(this, value);\r\n    };\r\n\r\n    // prompt-specific validation\r\n    if (!options.title) {\r\n      throw new Error('prompt requires a title');\r\n    }\r\n\r\n    if (typeof options.callback !== 'function') {\r\n      throw new Error('prompt requires a callback');\r\n    }\r\n\r\n    if (!templates.inputs[options.inputType]) {\r\n      throw new Error('Invalid prompt type');\r\n    }\r\n\r\n    // Create the input based on the supplied type\r\n    input = $(templates.inputs[options.inputType]);\r\n\r\n    switch (options.inputType) {\r\n      case 'text':\r\n      case 'textarea':\r\n      case 'email':\r\n      case 'password':\r\n        input.val(options.value);\r\n\r\n        if (options.placeholder) {\r\n          input.attr('placeholder', options.placeholder);\r\n        }\r\n\r\n        if (options.pattern) {\r\n          input.attr('pattern', options.pattern);\r\n        }\r\n\r\n        if (options.maxlength) {\r\n          input.attr('maxlength', options.maxlength);\r\n        }\r\n\r\n        if (options.required) {\r\n          input.prop({ 'required': true });\r\n        }\r\n\r\n        if (options.rows && !isNaN(parseInt(options.rows))) {\r\n          if (options.inputType === 'textarea') {\r\n            input.attr({ 'rows': options.rows });\r\n          }\r\n        }\r\n        break;\r\n\r\n      case 'date':\r\n      case 'time':\r\n      case 'number':\r\n      case 'range':\r\n        input.val(options.value);\r\n\r\n        if (options.placeholder) {\r\n          input.attr('placeholder', options.placeholder);\r\n        }\r\n\r\n        if (options.pattern) {\r\n          input.attr('pattern', options.pattern);\r\n        }\r\n        else {\r\n          if(options.inputType === 'date') {\r\n            // Add the ISO-8601 short date format as a fallback for browsers without native type=\"date\" support\r\n            input.attr('pattern', '\\d{4}-\\d{2}-\\d{2}');\r\n          }\r\n          else if(options.inputType === 'time') {\r\n            // Add an HH:MM pattern as a fallback for browsers without native type=\"time\" support\r\n            input.attr('pattern', '\\d{2}:\\d{2}');\r\n          }\r\n        }\r\n\r\n        if (options.required) {\r\n          input.prop({ 'required': true });\r\n        }\r\n\r\n        if (options.step) {\r\n          if (options.step === 'any' || (!isNaN(options.step) && parseFloat(options.step) > 0)) {\r\n            input.attr('step', options.step);\r\n          }\r\n          else {\r\n            throw new Error('\"step\" must be a valid positive number or the value \"any\". See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-step for more information.');\r\n          }\r\n        }\r\n\r\n        if (minAndMaxAreValid(options.inputType, options.min, options.max)) {\r\n          if (options.min !== undefined) {\r\n            input.attr('min', options.min);\r\n          }\r\n          if (options.max !== undefined) {\r\n            input.attr('max', options.max);\r\n          }\r\n        }\r\n        break;\r\n\r\n      case 'select':\r\n        let groups = {};\r\n        inputOptions = options.inputOptions || [];\r\n\r\n        if (!Array.isArray(inputOptions)) {\r\n          throw new Error('Please pass an array of input options');\r\n        }\r\n\r\n        if (!inputOptions.length) {\r\n          throw new Error('prompt with \"inputType\" set to \"select\" requires at least one option');\r\n        }\r\n\r\n        if (options.required) {\r\n          input.prop({ 'required': true });\r\n        }\r\n\r\n        if (options.multiple) {\r\n          input.prop({ 'multiple': true });\r\n        }\r\n\r\n        each(inputOptions, function (_, option) {\r\n          // Assume the element to attach to is the input...\r\n          let elem = input;\r\n\r\n          if (option.value === undefined || option.text === undefined) {\r\n            throw new Error('each option needs a \"value\" property and a \"text\" property');\r\n          }\r\n\r\n          // ... but override that element if this option sits in a group\r\n\r\n          if (option.group) {\r\n            // Initialise group if necessary\r\n            if (!groups[option.group]) {\r\n              groups[option.group] = $('<optgroup />').attr('label', option.group);\r\n            }\r\n\r\n            elem = groups[option.group];\r\n          }\r\n\r\n          let o = $(templates.option);\r\n          o.attr('value', option.value).text(option.text);\r\n          elem.append(o);\r\n        });\r\n\r\n        each(groups, function (_, group) {\r\n          input.append(group);\r\n        });\r\n\r\n        // Safe to set a select's value as per a normal input\r\n        input.val(options.value);\r\n        if (options.bootstrap < 5) {\r\n          input.removeClass('form-select').addClass('form-control');\r\n        }\r\n        break;\r\n\r\n      case 'checkbox':\r\n        let checkboxValues = Array.isArray(options.value) ? options.value : [options.value];\r\n        inputOptions = options.inputOptions || [];\r\n\r\n        if (!inputOptions.length) {\r\n          throw new Error('prompt with \"inputType\" set to \"checkbox\" requires at least one option');\r\n        }\r\n\r\n        // Checkboxes have to nest within a containing element, so they break the rules a bit and we end up re-assigning our 'input' element to this container instead\r\n        input = $('<div class=\"bootbox-checkbox-list\"></div>');\r\n\r\n        each(inputOptions, function (_, option) {\r\n          if (option.value === undefined || option.text === undefined) {\r\n            throw new Error('each option needs a \"value\" property and a \"text\" property');\r\n          }\r\n\r\n          let checkbox = $(templates.inputs[options.inputType]);\r\n\r\n          checkbox.find('input').attr('value', option.value);\r\n          checkbox.find('label').append('\\n' + option.text);\r\n\r\n          // We've ensured values is an array, so we can always iterate over it\r\n          each(checkboxValues, function (_, value) {\r\n            if (value === option.value) {\r\n              checkbox.find('input').prop('checked', true);\r\n            }\r\n          });\r\n\r\n          input.append(checkbox);\r\n        });\r\n        break;\r\n\r\n      case 'radio':\r\n        // Make sure that value is not an array (only a single radio can ever be checked)\r\n        if (options.value !== undefined && Array.isArray(options.value)) {\r\n          throw new Error('prompt with \"inputType\" set to \"radio\" requires a single, non-array value for \"value\"');\r\n        }\r\n\r\n        inputOptions = options.inputOptions || [];\r\n\r\n        if (!inputOptions.length) {\r\n          throw new Error('prompt with \"inputType\" set to \"radio\" requires at least one option');\r\n        }\r\n\r\n        // Radiobuttons have to nest within a containing element, so they break the rules a bit and we end up re-assigning our 'input' element to this container instead\r\n        input = $('<div class=\"bootbox-radiobutton-list\"></div>');\r\n\r\n        // Radiobuttons should always have an initial checked input checked in a \"group\".\r\n        // If value is undefined or doesn't match an input option, select the first radiobutton\r\n        let checkFirstRadio = true;\r\n\r\n        each(inputOptions, function (_, option) {\r\n          if (option.value === undefined || option.text === undefined) {\r\n            throw new Error('each option needs a \"value\" property and a \"text\" property');\r\n          }\r\n\r\n          let radio = $(templates.inputs[options.inputType]);\r\n\r\n          radio.find('input').attr('value', option.value);\r\n          radio.find('label').append('\\n' + option.text);\r\n\r\n          if (options.value !== undefined) {\r\n            if (option.value === options.value) {\r\n              radio.find('input').prop('checked', true);\r\n              checkFirstRadio = false;\r\n            }\r\n          }\r\n\r\n          input.append(radio);\r\n        });\r\n\r\n        if (checkFirstRadio) {\r\n          input.find('input[type=\"radio\"]').first().prop('checked', true);\r\n        }\r\n        break;\r\n    }\r\n\r\n    // Now place it in our form\r\n    form.append(input);\r\n\r\n    form.on('submit', function (e) {\r\n      e.preventDefault();\r\n      // Fix for SammyJS (or similar JS routing library) hijacking the form post.\r\n      e.stopPropagation();\r\n\r\n      // @TODO can we actually click *the* button object instead?\r\n      // e.g. buttons.confirm.click() or similar\r\n      promptDialog.find('.bootbox-accept').trigger('click');\r\n    });\r\n\r\n    if (options.message && options.message.trim() !== '') {\r\n      // Add the form to whatever content the user may have added.\r\n      let message = $(templates.promptMessage).html(options.message);\r\n      form.prepend(message);\r\n      options.message = form;\r\n    }\r\n    else {\r\n      options.message = form;\r\n    }\r\n\r\n    // Generate the dialog\r\n    promptDialog = exports.dialog(options);\r\n\r\n    // Clear the existing handler focusing the submit button...\r\n    promptDialog.off('shown.bs.modal', focusPrimaryButton);\r\n\r\n    // ...and replace it with one focusing our input, if possible\r\n    promptDialog.on('shown.bs.modal', function () {\r\n      // Need the closure here since input isn't an object otherwise\r\n      input.focus();\r\n    });\r\n\r\n    if (shouldShow === true) {\r\n      promptDialog.modal('show');\r\n    }\r\n\r\n    return promptDialog;\r\n  };\r\n\r\n\r\n  // INTERNAL FUNCTIONS\r\n  // *************************************************************************************************************\r\n\r\n  // Map a flexible set of arguments into a single returned object.\r\n  // If args.length is already one just return it, otherwise use the properties argument to map the unnamed args to object properties.\r\n  // So in the latter case:\r\n  //\r\n  //    mapArguments([\"foo\", $.noop], [\"message\", \"callback\"])\r\n  //  \r\n  //  results in\r\n  //\r\n  //    { message: \"foo\", callback: $.noop }\r\n  //\r\n  function mapArguments(args, properties) {\r\n    let argsLength = args.length;\r\n    let options = {};\r\n\r\n    if (argsLength < 1 || argsLength > 2) {\r\n      throw new Error('Invalid argument length');\r\n    }\r\n\r\n    if (argsLength === 2 || typeof args[0] === 'string') {\r\n      options[properties[0]] = args[0];\r\n      options[properties[1]] = args[1];\r\n    } else {\r\n      options = args[0];\r\n    }\r\n\r\n    return options;\r\n  }\r\n\r\n\r\n  // Merge a set of default dialog options with user supplied arguments\r\n  function mergeArguments(defaults, args, properties) {\r\n    return $.extend(\r\n      // Deep merge\r\n      true,\r\n      // Ensure the target is an empty, unreferenced object\r\n      {},\r\n      // The base options object for this type of dialog (often just buttons)\r\n      defaults,\r\n      // 'args' could be an object or array; if it's an array properties will map it to a proper options object\r\n      mapArguments(args, properties)\r\n    );\r\n  }\r\n\r\n\r\n  // This entry-level method makes heavy use of composition to take a simple range of inputs and return valid options suitable for passing to bootbox.dialog\r\n  function mergeDialogOptions(className, labels, properties, args) {\r\n    let locale;\r\n    if (args && args[0]) {\r\n      locale = args[0].locale || defaults.locale;\r\n      let swapButtons = args[0].swapButtonOrder || defaults.swapButtonOrder;\r\n\r\n      if (swapButtons) {\r\n        labels = labels.reverse();\r\n      }\r\n    }\r\n\r\n    // Build up a base set of dialog properties\r\n    let baseOptions = {\r\n      className: 'bootbox-' + className,\r\n      buttons: createLabels(labels, locale)\r\n    };\r\n\r\n    // Ensure the buttons properties generated, *after* merging with user args are still valid against the supplied labels\r\n    return validateButtons(\r\n      // Merge the generated base properties with user supplied arguments\r\n      mergeArguments(\r\n        baseOptions,\r\n        args,\r\n        // If args.length > 1, properties specify how each arg maps to an object key\r\n        properties\r\n      ),\r\n      labels\r\n    );\r\n  }\r\n\r\n\r\n  // Checks each button object to see if key is valid. \r\n  // This function will only be called by the alert, confirm, and prompt helpers. \r\n  function validateButtons(options, buttons) {\r\n    let allowedButtons = {};\r\n    each(buttons, function (key, value) {\r\n      allowedButtons[value] = true;\r\n    });\r\n\r\n    each(options.buttons, function (key) {\r\n      if (allowedButtons[key] === undefined) {\r\n        throw new Error('button key \"' + key + '\" is not allowed (options are ' + buttons.join(' ') + ')');\r\n      }\r\n    });\r\n\r\n    return options;\r\n  }\r\n\r\n\r\n  // From a given list of arguments, return a suitable object of button labels.\r\n  // All this does is normalise the given labels and translate them where possible.\r\n  // e.g. \"ok\", \"confirm\" -> { ok: \"OK\", cancel: \"Annuleren\" }\r\n  function createLabels(labels, locale) {\r\n    let buttons = {};\r\n\r\n    for (let i = 0, j = labels.length; i < j; i++) {\r\n      let argument = labels[i];\r\n      let key = argument.toLowerCase();\r\n      let value = argument.toUpperCase();\r\n\r\n      buttons[key] = {\r\n        label: getText(value, locale)\r\n      };\r\n    }\r\n\r\n    return buttons;\r\n  }\r\n\r\n\r\n  // Get localized text from a locale. Defaults to 'en' locale if no locale provided or a non-registered locale is requested\r\n  function getText(key, locale) {\r\n    let labels = locales[locale];\r\n\r\n    return labels ? labels[key] : locales.en[key];\r\n  }\r\n\r\n\r\n  // Filter and tidy up any user supplied parameters to this dialog.\r\n  // Also looks for any shorthands used and ensures that the options which are returned are all normalized properly\r\n  function sanitize(options) {\r\n    let buttons;\r\n    let total;\r\n\r\n    if (typeof options !== 'object') {\r\n      throw new Error('Please supply an object of options');\r\n    }\r\n\r\n    if (!options.message) {\r\n      throw new Error('\"message\" option must not be null or an empty string.');\r\n    }\r\n\r\n    // Make sure any supplied options take precedence over defaults\r\n    options = $.extend({}, defaults, options);\r\n\r\n    // Make sure backdrop is either true, false, or 'static'\r\n    if (!options.backdrop) {\r\n      options.backdrop = (options.backdrop === false || options.backdrop === 0) ? false : 'static';\r\n    } else {\r\n      options.backdrop = typeof options.backdrop === 'string' && options.backdrop.toLowerCase() === 'static' ? 'static' : true;\r\n    } \r\n\r\n    // No buttons is still a valid dialog but it's cleaner to always have a buttons object to iterate over, even if it's empty\r\n    if (!options.buttons) {\r\n      options.buttons = {};\r\n    }\r\n    \r\n    buttons = options.buttons;\r\n\r\n    total = getKeyLength(buttons);\r\n\r\n    each(buttons, function (key, button, index) {\r\n      if (typeof button === 'function') {\r\n        // Short form, assume value is our callback. Since button isn't an object it isn't a reference either so re-assign it\r\n        button = buttons[key] = {\r\n          callback: button\r\n        };\r\n      }\r\n\r\n      // Before any further checks, make sure button is the correct type\r\n      if (typeof button !== 'object') {\r\n        throw new Error('button with key \"' + key + '\" must be an object');\r\n      }\r\n\r\n      if (!button.label) {\r\n        // The lack of an explicit label means we'll assume the key is good enough\r\n        button.label = key;\r\n      }\r\n\r\n      if (!button.className) {\r\n        let isPrimary = false;\r\n        if (options.swapButtonOrder) {\r\n          isPrimary = index === 0;\r\n        }\r\n        else {\r\n          isPrimary = index === total - 1;\r\n        }\r\n\r\n        if (total <= 2 && isPrimary) {\r\n          // always add a primary to the main option in a one or two-button dialog\r\n          button.className = 'btn-primary';\r\n        } \r\n        else {\r\n          // adding both classes allows us to target both BS3 and BS4+ without needing to check the version\r\n          button.className = 'btn-secondary btn-default';\r\n        }\r\n      }\r\n    });\r\n\r\n    return options;\r\n  }\r\n\r\n\r\n  // Returns a count of the properties defined on the object\r\n  function getKeyLength(obj) {\r\n    return Object.keys(obj).length;\r\n  }\r\n\r\n\r\n  // Tiny wrapper function around jQuery.each; just adds index as the third parameter\r\n  function each(collection, iterator) {\r\n    let index = 0;\r\n    $.each(collection, function (key, value) {\r\n      iterator(key, value, index++);\r\n    });\r\n  }\r\n\r\n\r\n  function focusPrimaryButton(e) {\r\n    e.data.dialog.find('.bootbox-accept').first().trigger('focus');\r\n  }\r\n\r\n\r\n  function destroyModal(e) {\r\n    // Ensure we don't accidentally intercept hidden events triggered by children of the current dialog. \r\n    // We shouldn't need to handle this anymore, now that Bootstrap namespaces its events, but still worth doing.\r\n    if (e.target === e.data.dialog[0]) {\r\n      e.data.dialog.remove();\r\n    }\r\n  }\r\n\r\n\r\n  function unbindModal(e) {\r\n    if (e.target === e.data.dialog[0]) {\r\n      e.data.dialog.off('escape.close.bb');\r\n      e.data.dialog.off('click');\r\n    }\r\n  }\r\n\r\n\r\n  //  Handle the invoked dialog callback\r\n  function processCallback(e, dialog, callback) {\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n\r\n    // By default we assume a callback will get rid of the dialog, although it is given the opportunity to override this\r\n\r\n    // If the callback can be invoked and it *explicitly returns false*, then we'll set a flag to keep the dialog active...\r\n    let preserveDialog = typeof callback === 'function' && callback.call(dialog, e) === false;\r\n\r\n    // ... otherwise we'll bin it\r\n    if (!preserveDialog) {\r\n      dialog.modal('hide');\r\n    }\r\n  }\r\n\r\n  // Validate `min` and `max` values based on the current `inputType` value\r\n  function minAndMaxAreValid(type, min, max) {\r\n    let result = false;\r\n    let minValid = true;\r\n    let maxValid = true;\r\n\r\n    if (type === 'date') {\r\n      if (min !== undefined && !(minValid = dateIsValid(min))) {\r\n        console.warn('Browsers which natively support the \"date\" input type expect date values to be of the form \"YYYY-MM-DD\" (see ISO-8601 https://www.iso.org/iso-8601-date-and-time-format.html). Bootbox does not enforce this rule, but your min value may not be enforced by this browser.');\r\n      }\r\n      else if (max !== undefined && !(maxValid = dateIsValid(max))) {\r\n        console.warn('Browsers which natively support the \"date\" input type expect date values to be of the form \"YYYY-MM-DD\" (see ISO-8601 https://www.iso.org/iso-8601-date-and-time-format.html). Bootbox does not enforce this rule, but your max value may not be enforced by this browser.');\r\n      }\r\n    }\r\n    else if (type === 'time') {\r\n      if (min !== undefined && !(minValid = timeIsValid(min))) {\r\n        throw new Error('\"min\" is not a valid time. See https://www.w3.org/TR/2012/WD-html-markup-20120315/datatypes.html#form.data.time for more information.');\r\n      }\r\n      else if (max !== undefined && !(maxValid = timeIsValid(max))) {\r\n        throw new Error('\"max\" is not a valid time. See https://www.w3.org/TR/2012/WD-html-markup-20120315/datatypes.html#form.data.time for more information.');\r\n      }\r\n    }\r\n    else {\r\n      if (min !== undefined && isNaN(min)) {\r\n        minValid = false;\r\n        throw new Error('\"min\" must be a valid number. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-min for more information.');\r\n      }\r\n\r\n      if (max !== undefined && isNaN(max)) {\r\n        maxValid = false;\r\n        throw new Error('\"max\" must be a valid number. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-max for more information.');\r\n      }\r\n    }\r\n\r\n    if (minValid && maxValid) {\r\n      if (max < min) {\r\n        throw new Error('\"max\" must be greater than or equal to \"min\". See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-max for more information.');\r\n      }\r\n      else {\r\n        result = true;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  function timeIsValid(value) {\r\n    return /([01][0-9]|2[0-3]):[0-5][0-9]?:[0-5][0-9]/.test(value);\r\n  }\r\n\r\n  function dateIsValid(value) {\r\n    return /(\\d{4})-(\\d{2})-(\\d{2})/.test(value);\r\n  }\r\n\r\n  //  The Bootbox object\r\n  return exports;\r\n}));\r\n", "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 3099:\n/***/ (function(module) {\n\nmodule.exports = function (it) {\n  if (typeof it != 'function') {\n    throw TypeError(String(it) + ' is not a function');\n  } return it;\n};\n\n\n/***/ }),\n\n/***/ 6077:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\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\n\n/***/ }),\n\n/***/ 1223:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\nvar create = __webpack_require__(30);\nvar definePropertyModule = __webpack_require__(3070);\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\n\n/***/ }),\n\n/***/ 1530:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = __webpack_require__(8710).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\n\n/***/ }),\n\n/***/ 5787:\n/***/ (function(module) {\n\nmodule.exports = function (it, Constructor, name) {\n  if (!(it instanceof Constructor)) {\n    throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n  } return it;\n};\n\n\n/***/ }),\n\n/***/ 9670:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\n\nmodule.exports = function (it) {\n  if (!isObject(it)) {\n    throw TypeError(String(it) + ' is not an object');\n  } return it;\n};\n\n\n/***/ }),\n\n/***/ 4019:\n/***/ (function(module) {\n\nmodule.exports = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';\n\n\n/***/ }),\n\n/***/ 260:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(4019);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\nvar has = __webpack_require__(6656);\nvar classof = __webpack_require__(648);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar defineProperty = __webpack_require__(3070).f;\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar uid = __webpack_require__(9711);\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar isPrototypeOf = ObjectPrototype.isPrototypeOf;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME;\n\nvar TypedArrayConstructorsList = {\n  Int8Array: 1,\n  Uint8Array: 1,\n  Uint8ClampedArray: 1,\n  Int16Array: 2,\n  Uint16Array: 2,\n  Int32Array: 4,\n  Uint32Array: 4,\n  Float32Array: 4,\n  Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n  BigInt64Array: 8,\n  BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return klass === 'DataView'\n    || has(TypedArrayConstructorsList, klass)\n    || has(BigIntArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return has(TypedArrayConstructorsList, klass)\n    || has(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n  if (isTypedArray(it)) return it;\n  throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n  if (setPrototypeOf) {\n    if (isPrototypeOf.call(TypedArray, C)) return C;\n  } else for (var ARRAY in TypedArrayConstructorsList) if (has(TypedArrayConstructorsList, NAME)) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (C === TypedArrayConstructor || isPrototypeOf.call(TypedArrayConstructor, C))) {\n      return C;\n    }\n  } throw TypeError('Target is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && has(TypedArrayConstructor.prototype, KEY)) {\n      delete TypedArrayConstructor.prototype[KEY];\n    }\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    redefine(TypedArrayPrototype, KEY, forced ? property\n      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n  }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n  var ARRAY, TypedArrayConstructor;\n  if (!DESCRIPTORS) return;\n  if (setPrototypeOf) {\n    if (forced) for (ARRAY in TypedArrayConstructorsList) {\n      TypedArrayConstructor = global[ARRAY];\n      if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) {\n        delete TypedArrayConstructor[KEY];\n      }\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8Array[KEY] || property);\n      } catch (error) { /* empty */ }\n    } else return;\n  }\n  for (ARRAY in TypedArrayConstructorsList) {\n    TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n      redefine(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n  if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || typeof TypedArray != 'function' || TypedArray === Function.prototype) {\n  // eslint-disable-next-line no-shadow -- safe\n  TypedArray = function TypedArray() {\n    throw TypeError('Incorrect invocation');\n  };\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n  }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n  TypedArrayPrototype = TypedArray.prototype;\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n  }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQIRED = true;\n  defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n    return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n  } });\n  for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n    createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n  }\n}\n\nmodule.exports = {\n  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n\n\n/***/ }),\n\n/***/ 3331:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(4019);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefineAll = __webpack_require__(2248);\nvar fails = __webpack_require__(7293);\nvar anInstance = __webpack_require__(5787);\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\nvar toIndex = __webpack_require__(7067);\nvar IEEE754 = __webpack_require__(1179);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar getOwnPropertyNames = __webpack_require__(8006).f;\nvar defineProperty = __webpack_require__(3070).f;\nvar arrayFill = __webpack_require__(1285);\nvar setToStringTag = __webpack_require__(8003);\nvar InternalStateModule = __webpack_require__(9909);\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar $DataView = global[DATA_VIEW];\nvar $DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar RangeError = global.RangeError;\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n  return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n  return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n  return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n  return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n  return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n  return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key) {\n  defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n  var intIndex = toIndex(index);\n  var store = getInternalState(view);\n  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n  var bytes = getInternalState(store.buffer).bytes;\n  var start = intIndex + store.byteOffset;\n  var pack = bytes.slice(start, start + count);\n  return isLittleEndian ? pack : pack.reverse();\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n  var intIndex = toIndex(index);\n  var store = getInternalState(view);\n  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n  var bytes = getInternalState(store.buffer).bytes;\n  var start = intIndex + store.byteOffset;\n  var pack = conversion(+value);\n  for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n  $ArrayBuffer = function ArrayBuffer(length) {\n    anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n    var byteLength = toIndex(length);\n    setInternalState(this, {\n      bytes: arrayFill.call(new Array(byteLength), 0),\n      byteLength: byteLength\n    });\n    if (!DESCRIPTORS) this.byteLength = byteLength;\n  };\n\n  $DataView = function DataView(buffer, byteOffset, byteLength) {\n    anInstance(this, $DataView, DATA_VIEW);\n    anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n    var bufferLength = getInternalState(buffer).byteLength;\n    var offset = toInteger(byteOffset);\n    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n    setInternalState(this, {\n      buffer: buffer,\n      byteLength: byteLength,\n      byteOffset: offset\n    });\n    if (!DESCRIPTORS) {\n      this.buffer = buffer;\n      this.byteLength = byteLength;\n      this.byteOffset = offset;\n    }\n  };\n\n  if (DESCRIPTORS) {\n    addGetter($ArrayBuffer, 'byteLength');\n    addGetter($DataView, 'buffer');\n    addGetter($DataView, 'byteLength');\n    addGetter($DataView, 'byteOffset');\n  }\n\n  redefineAll($DataView[PROTOTYPE], {\n    getInt8: function getInt8(byteOffset) {\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset) {\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /* , littleEndian */) {\n      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n    },\n    getUint32: function getUint32(byteOffset /* , littleEndian */) {\n      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n    },\n    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n    },\n    setInt8: function setInt8(byteOffset, value) {\n      set(this, 1, byteOffset, packInt8, value);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      set(this, 1, byteOffset, packInt8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n      set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n    }\n  });\n} else {\n  /* eslint-disable no-new -- required for testing */\n  if (!fails(function () {\n    NativeArrayBuffer(1);\n  }) || !fails(function () {\n    new NativeArrayBuffer(-1);\n  }) || fails(function () {\n    new NativeArrayBuffer();\n    new NativeArrayBuffer(1.5);\n    new NativeArrayBuffer(NaN);\n    return NativeArrayBuffer.name != ARRAY_BUFFER;\n  })) {\n  /* eslint-enable no-new -- required for testing */\n    $ArrayBuffer = function ArrayBuffer(length) {\n      anInstance(this, $ArrayBuffer);\n      return new NativeArrayBuffer(toIndex(length));\n    };\n    var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer[PROTOTYPE];\n    for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n      if (!((key = keys[j++]) in $ArrayBuffer)) {\n        createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n      }\n    }\n    ArrayBufferPrototype.constructor = $ArrayBuffer;\n  }\n\n  // WebKit bug - the same parent prototype for typed arrays and data view\n  if (setPrototypeOf && getPrototypeOf($DataViewPrototype) !== ObjectPrototype) {\n    setPrototypeOf($DataViewPrototype, ObjectPrototype);\n  }\n\n  // iOS Safari 7.x bug\n  var testView = new $DataView(new $ArrayBuffer(2));\n  var nativeSetInt8 = $DataViewPrototype.setInt8;\n  testView.setInt8(0, 2147483648);\n  testView.setInt8(1, 2147483649);\n  if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll($DataViewPrototype, {\n    setInt8: function setInt8(byteOffset, value) {\n      nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n    }\n  }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n  ArrayBuffer: $ArrayBuffer,\n  DataView: $DataView\n};\n\n\n/***/ }),\n\n/***/ 1048:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toObject = __webpack_require__(7908);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toLength = __webpack_require__(7466);\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n  var O = toObject(this);\n  var len = toLength(O.length);\n  var to = toAbsoluteIndex(target, len);\n  var from = toAbsoluteIndex(start, len);\n  var end = arguments.length > 2 ? arguments[2] : undefined;\n  var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n  var inc = 1;\n  if (from < to && to < from + count) {\n    inc = -1;\n    from += count - 1;\n    to += count - 1;\n  }\n  while (count-- > 0) {\n    if (from in O) O[to] = O[from];\n    else delete O[to];\n    to += inc;\n    from += inc;\n  } return O;\n};\n\n\n/***/ }),\n\n/***/ 1285:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toObject = __webpack_require__(7908);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toLength = __webpack_require__(7466);\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\n\n/***/ }),\n\n/***/ 8533:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $forEach = __webpack_require__(2092).forEach;\nvar arrayMethodIsStrict = __webpack_require__(9341);\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} : [].forEach;\n\n\n/***/ }),\n\n/***/ 8457:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar bind = __webpack_require__(9974);\nvar toObject = __webpack_require__(7908);\nvar callWithSafeIterationClosing = __webpack_require__(3411);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar toLength = __webpack_require__(7466);\nvar createProperty = __webpack_require__(6135);\nvar getIteratorMethod = __webpack_require__(1246);\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\n\n/***/ }),\n\n/***/ 1318:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(5656);\nvar toLength = __webpack_require__(7466);\nvar toAbsoluteIndex = __webpack_require__(1400);\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\n\n/***/ }),\n\n/***/ 2092:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar bind = __webpack_require__(9974);\nvar IndexedObject = __webpack_require__(8361);\nvar toObject = __webpack_require__(7908);\nvar toLength = __webpack_require__(7466);\nvar arraySpeciesCreate = __webpack_require__(5417);\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\n\n/***/ }),\n\n/***/ 6583:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toIndexedObject = __webpack_require__(5656);\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar min = Math.min;\nvar nativeLastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n  // convert -0 to +0\n  if (NEGATIVE_ZERO) return nativeLastIndexOf.apply(this, arguments) || 0;\n  var O = toIndexedObject(this);\n  var length = toLength(O.length);\n  var index = length - 1;\n  if (arguments.length > 1) index = min(index, toInteger(arguments[1]));\n  if (index < 0) index = length + index;\n  for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n  return -1;\n} : nativeLastIndexOf;\n\n\n/***/ }),\n\n/***/ 1194:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar V8_VERSION = __webpack_require__(7392);\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\n\n/***/ }),\n\n/***/ 9341:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(7293);\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\n\n/***/ }),\n\n/***/ 3671:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(3099);\nvar toObject = __webpack_require__(7908);\nvar IndexedObject = __webpack_require__(8361);\nvar toLength = __webpack_require__(7466);\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n  return function (that, callbackfn, argumentsLength, memo) {\n    aFunction(callbackfn);\n    var O = toObject(that);\n    var self = IndexedObject(O);\n    var length = toLength(O.length);\n    var index = IS_RIGHT ? length - 1 : 0;\n    var i = IS_RIGHT ? -1 : 1;\n    if (argumentsLength < 2) while (true) {\n      if (index in self) {\n        memo = self[index];\n        index += i;\n        break;\n      }\n      index += i;\n      if (IS_RIGHT ? index < 0 : length <= index) {\n        throw TypeError('Reduce of empty array with no initial value');\n      }\n    }\n    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n      memo = callbackfn(memo, self[index], index, O);\n    }\n    return memo;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.reduce` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduce\n  left: createMethod(false),\n  // `Array.prototype.reduceRight` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n  right: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 5417:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar isArray = __webpack_require__(3157);\nvar wellKnownSymbol = __webpack_require__(5112);\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\n\n/***/ }),\n\n/***/ 3411:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar iteratorClose = __webpack_require__(9212);\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\n\n/***/ }),\n\n/***/ 7072:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\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 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\n\n/***/ }),\n\n/***/ 4326:\n/***/ (function(module) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n\n/***/ 648:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar classofRaw = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\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\n\n/***/ }),\n\n/***/ 9920:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar has = __webpack_require__(6656);\nvar ownKeys = __webpack_require__(3887);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar definePropertyModule = __webpack_require__(3070);\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\n\n/***/ }),\n\n/***/ 8544:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\n\n/***/ }),\n\n/***/ 4994:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar IteratorPrototype = __webpack_require__(3383).IteratorPrototype;\nvar create = __webpack_require__(30);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar setToStringTag = __webpack_require__(8003);\nvar Iterators = __webpack_require__(7497);\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\n\n/***/ }),\n\n/***/ 8880:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\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\n\n/***/ }),\n\n/***/ 9114:\n/***/ (function(module) {\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n/***/ }),\n\n/***/ 6135:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toPrimitive = __webpack_require__(7593);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\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\n\n/***/ }),\n\n/***/ 654:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar createIteratorConstructor = __webpack_require__(4994);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar setToStringTag = __webpack_require__(8003);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\nvar Iterators = __webpack_require__(7497);\nvar IteratorsCore = __webpack_require__(3383);\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\n\n/***/ }),\n\n/***/ 9781:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ 317:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\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\n\n/***/ }),\n\n/***/ 8324:\n/***/ (function(module) {\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\n\n/***/ }),\n\n/***/ 8113:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n\n/***/ }),\n\n/***/ 7392:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar userAgent = __webpack_require__(8113);\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] + 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\n\n/***/ }),\n\n/***/ 748:\n/***/ (function(module) {\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\n\n/***/ }),\n\n/***/ 2109:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar getOwnPropertyDescriptor = __webpack_require__(1236).f;\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar setGlobal = __webpack_require__(3505);\nvar copyConstructorProperties = __webpack_require__(9920);\nvar isForced = __webpack_require__(4705);\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\n\n/***/ }),\n\n/***/ 7293:\n/***/ (function(module) {\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n\n\n/***/ }),\n\n/***/ 7007:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: Remove from `core-js@4` since it's moved to entry points\n__webpack_require__(4916);\nvar redefine = __webpack_require__(1320);\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar regexpExec = __webpack_require__(2261);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nvar SPECIES = wellKnownSymbol('species');\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  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      if (regexp.exec === regexpExec) {\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(RegExp.prototype, 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(RegExp.prototype[SYMBOL], 'sham', true);\n};\n\n\n/***/ }),\n\n/***/ 9974:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(3099);\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\n\n/***/ }),\n\n/***/ 5005:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar path = __webpack_require__(857);\nvar global = __webpack_require__(7854);\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\n\n/***/ }),\n\n/***/ 1246:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(648);\nvar Iterators = __webpack_require__(7497);\nvar wellKnownSymbol = __webpack_require__(5112);\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\n\n/***/ }),\n\n/***/ 8554:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar getIteratorMethod = __webpack_require__(1246);\n\nmodule.exports = function (it) {\n  var iteratorMethod = getIteratorMethod(it);\n  if (typeof iteratorMethod != 'function') {\n    throw TypeError(String(it) + ' is not iterable');\n  } return anObject(iteratorMethod.call(it));\n};\n\n\n/***/ }),\n\n/***/ 647:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toObject = __webpack_require__(7908);\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/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\n\n/***/ }),\n\n/***/ 7854:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar 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  /* global globalThis -- safe */\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  check(typeof self == 'object' && self) ||\n  check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n\n\n/***/ }),\n\n/***/ 6656:\n/***/ (function(module) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n\n/***/ 3501:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 490:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n\n\n/***/ }),\n\n/***/ 4664:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fails = __webpack_require__(7293);\nvar createElement = __webpack_require__(317);\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ 1179:\n/***/ (function(module) {\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n  var buffer = new Array(bytes);\n  var exponentLength = bytes * 8 - mantissaLength - 1;\n  var eMax = (1 << exponentLength) - 1;\n  var eBias = eMax >> 1;\n  var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n  var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n  var index = 0;\n  var exponent, mantissa, c;\n  number = abs(number);\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (number != number || number === Infinity) {\n    // eslint-disable-next-line no-self-compare -- NaN check\n    mantissa = number != number ? 1 : 0;\n    exponent = eMax;\n  } else {\n    exponent = floor(log(number) / LN2);\n    if (number * (c = pow(2, -exponent)) < 1) {\n      exponent--;\n      c *= 2;\n    }\n    if (exponent + eBias >= 1) {\n      number += rt / c;\n    } else {\n      number += rt * pow(2, 1 - eBias);\n    }\n    if (number * c >= 2) {\n      exponent++;\n      c /= 2;\n    }\n    if (exponent + eBias >= eMax) {\n      mantissa = 0;\n      exponent = eMax;\n    } else if (exponent + eBias >= 1) {\n      mantissa = (number * c - 1) * pow(2, mantissaLength);\n      exponent = exponent + eBias;\n    } else {\n      mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n      exponent = 0;\n    }\n  }\n  for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n  exponent = exponent << mantissaLength | mantissa;\n  exponentLength += mantissaLength;\n  for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n  buffer[--index] |= sign * 128;\n  return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n  var bytes = buffer.length;\n  var exponentLength = bytes * 8 - mantissaLength - 1;\n  var eMax = (1 << exponentLength) - 1;\n  var eBias = eMax >> 1;\n  var nBits = exponentLength - 7;\n  var index = bytes - 1;\n  var sign = buffer[index--];\n  var exponent = sign & 127;\n  var mantissa;\n  sign >>= 7;\n  for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n  mantissa = exponent & (1 << -nBits) - 1;\n  exponent >>= -nBits;\n  nBits += mantissaLength;\n  for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n  if (exponent === 0) {\n    exponent = 1 - eBias;\n  } else if (exponent === eMax) {\n    return mantissa ? NaN : sign ? -Infinity : Infinity;\n  } else {\n    mantissa = mantissa + pow(2, mantissaLength);\n    exponent = exponent - eBias;\n  } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n  pack: pack,\n  unpack: unpack\n};\n\n\n/***/ }),\n\n/***/ 8361:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar classof = __webpack_require__(4326);\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\n\n/***/ }),\n\n/***/ 9587:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar setPrototypeOf = __webpack_require__(7674);\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\n\n/***/ }),\n\n/***/ 2788:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar store = __webpack_require__(5465);\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\n\n/***/ }),\n\n/***/ 9909:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_WEAK_MAP = __webpack_require__(8536);\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar objectHas = __webpack_require__(6656);\nvar shared = __webpack_require__(5465);\nvar sharedKey = __webpack_require__(6200);\nvar hiddenKeys = __webpack_require__(3501);\n\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) {\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    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    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\n\n/***/ }),\n\n/***/ 7659:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\nvar Iterators = __webpack_require__(7497);\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\n\n/***/ }),\n\n/***/ 3157:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(4326);\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n  return classof(arg) == 'Array';\n};\n\n\n/***/ }),\n\n/***/ 4705:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\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\n\n/***/ }),\n\n/***/ 111:\n/***/ (function(module) {\n\nmodule.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n\n/***/ 1913:\n/***/ (function(module) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ 7850:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar classof = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\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\n\n/***/ }),\n\n/***/ 9212:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\n\nmodule.exports = function (iterator) {\n  var returnMethod = iterator['return'];\n  if (returnMethod !== undefined) {\n    return anObject(returnMethod.call(iterator)).value;\n  }\n};\n\n\n/***/ }),\n\n/***/ 3383:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(7293);\nvar getPrototypeOf = __webpack_require__(9518);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar has = __webpack_require__(6656);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\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\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\n\n/***/ }),\n\n/***/ 7497:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 133:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  // Chrome 38 Symbol has incorrect toString conversion\n  /* global Symbol -- required for testing */\n  return !String(Symbol());\n});\n\n\n/***/ }),\n\n/***/ 590:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n  var url = new URL('b?a=1&b=2&c=3', 'http://a');\n  var searchParams = url.searchParams;\n  var result = '';\n  url.pathname = 'c%20d';\n  searchParams.forEach(function (value, key) {\n    searchParams['delete']('b');\n    result += key + value;\n  });\n  return (IS_PURE && !url.toJSON)\n    || !searchParams.sort\n    || url.href !== 'http://a/c%20d?a=1&c=3'\n    || searchParams.get('c') !== '3'\n    || String(new URLSearchParams('?a=1')) !== 'a=1'\n    || !searchParams[ITERATOR]\n    // throws in Edge\n    || new URL('https://a@b').username !== 'a'\n    || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n    // not punycoded in Edge\n    || new URL('http://\u0442\u0435\u0441\u0442').host !== 'xn--e1aybc'\n    // not escaped in Chrome 62-\n    || new URL('http://a#\u0431').hash !== '#%D0%B1'\n    // fails in Chrome 66-\n    || result !== 'a1c3'\n    // throws in Safari\n    || new URL('http://x', undefined).host !== 'x';\n});\n\n\n/***/ }),\n\n/***/ 8536:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar inspectSource = __webpack_require__(2788);\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n\n\n/***/ }),\n\n/***/ 1574:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fails = __webpack_require__(7293);\nvar objectKeys = __webpack_require__(1956);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar toObject = __webpack_require__(7908);\nvar IndexedObject = __webpack_require__(8361);\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(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  /* global Symbol -- required for testing */\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, 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} : nativeAssign;\n\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar defineProperties = __webpack_require__(6048);\nvar enumBugKeys = __webpack_require__(748);\nvar hiddenKeys = __webpack_require__(3501);\nvar html = __webpack_require__(490);\nvar documentCreateElement = __webpack_require__(317);\nvar sharedKey = __webpack_require__(6200);\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\n\n/***/ }),\n\n/***/ 6048:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar anObject = __webpack_require__(9670);\nvar objectKeys = __webpack_require__(1956);\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\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\n\n/***/ }),\n\n/***/ 3070:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\nvar anObject = __webpack_require__(9670);\nvar toPrimitive = __webpack_require__(7593);\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return nativeDefineProperty(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\n\n/***/ }),\n\n/***/ 1236:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar toIndexedObject = __webpack_require__(5656);\nvar toPrimitive = __webpack_require__(7593);\nvar has = __webpack_require__(6656);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return nativeGetOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ 8006:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ 5181:\n/***/ (function(__unused_webpack_module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ 9518:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar has = __webpack_require__(6656);\nvar toObject = __webpack_require__(7908);\nvar sharedKey = __webpack_require__(6200);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544);\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\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\n\n/***/ }),\n\n/***/ 6324:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar has = __webpack_require__(6656);\nvar toIndexedObject = __webpack_require__(5656);\nvar indexOf = __webpack_require__(1318).indexOf;\nvar hiddenKeys = __webpack_require__(3501);\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\n\n/***/ }),\n\n/***/ 1956:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ 5296:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.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} : nativePropertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ 7674:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-proto -- safe */\nvar anObject = __webpack_require__(9670);\nvar aPossiblePrototype = __webpack_require__(6077);\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.\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\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\n\n/***/ }),\n\n/***/ 288:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar classof = __webpack_require__(648);\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\n\n/***/ }),\n\n/***/ 3887:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\nvar getOwnPropertyNamesModule = __webpack_require__(8006);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar anObject = __webpack_require__(9670);\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\n\n/***/ }),\n\n/***/ 857:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nmodule.exports = global;\n\n\n/***/ }),\n\n/***/ 2248:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar redefine = __webpack_require__(1320);\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) redefine(target, key, src[key], options);\n  return target;\n};\n\n\n/***/ }),\n\n/***/ 1320:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar has = __webpack_require__(6656);\nvar setGlobal = __webpack_require__(3505);\nvar inspectSource = __webpack_require__(2788);\nvar InternalStateModule = __webpack_require__(9909);\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\n\n/***/ }),\n\n/***/ 7651:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(4326);\nvar regexpExec = __webpack_require__(2261);\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\n\n/***/ }),\n\n/***/ 2261:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar regexpFlags = __webpack_require__(7066);\nvar stickyHelpers = __webpack_require__(2999);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = 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.\n// eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing\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\n\n/***/ }),\n\n/***/ 7066:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar anObject = __webpack_require__(9670);\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\n\n/***/ }),\n\n/***/ 2999:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar fails = __webpack_require__(7293);\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\n\n/***/ }),\n\n/***/ 4488:\n/***/ (function(module) {\n\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\n\n/***/ }),\n\n/***/ 3505:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar createNonEnumerableProperty = __webpack_require__(8880);\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\n\n/***/ }),\n\n/***/ 6340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar getBuiltIn = __webpack_require__(5005);\nvar definePropertyModule = __webpack_require__(3070);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar DESCRIPTORS = __webpack_require__(9781);\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\n\n/***/ }),\n\n/***/ 8003:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineProperty = __webpack_require__(3070).f;\nvar has = __webpack_require__(6656);\nvar wellKnownSymbol = __webpack_require__(5112);\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\n\n/***/ }),\n\n/***/ 6200:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar shared = __webpack_require__(2309);\nvar uid = __webpack_require__(9711);\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ 5465:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar setGlobal = __webpack_require__(3505);\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n\n\n/***/ }),\n\n/***/ 2309:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar IS_PURE = __webpack_require__(1913);\nvar store = __webpack_require__(5465);\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.9.0',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '\u00A9 2021 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ 6707:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar aFunction = __webpack_require__(3099);\nvar wellKnownSymbol = __webpack_require__(5112);\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\n\n/***/ }),\n\n/***/ 8710:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\nvar requireObjectCoercible = __webpack_require__(4488);\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\n\n/***/ }),\n\n/***/ 3197:\n/***/ (function(module) {\n\n\"use strict\";\n\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n  var output = [];\n  var counter = 0;\n  var length = string.length;\n  while (counter < length) {\n    var value = string.charCodeAt(counter++);\n    if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n      // It's a high surrogate, and there is a next character.\n      var extra = string.charCodeAt(counter++);\n      if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n        output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n      } else {\n        // It's an unmatched surrogate; only append this code unit, in case the\n        // next code unit is the high surrogate of a surrogate pair.\n        output.push(value);\n        counter--;\n      }\n    } else {\n      output.push(value);\n    }\n  }\n  return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n  //  0..25 map to ASCII a..z or A..Z\n  // 26..35 map to ASCII 0..9\n  return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n  var k = 0;\n  delta = firstTime ? floor(delta / damp) : delta >> 1;\n  delta += floor(delta / numPoints);\n  for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n    delta = floor(delta / baseMinusTMin);\n  }\n  return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line max-statements -- TODO\nvar encode = function (input) {\n  var output = [];\n\n  // Convert the input in UCS-2 to an array of Unicode code points.\n  input = ucs2decode(input);\n\n  // Cache the length.\n  var inputLength = input.length;\n\n  // Initialize the state.\n  var n = initialN;\n  var delta = 0;\n  var bias = initialBias;\n  var i, currentValue;\n\n  // Handle the basic code points.\n  for (i = 0; i < input.length; i++) {\n    currentValue = input[i];\n    if (currentValue < 0x80) {\n      output.push(stringFromCharCode(currentValue));\n    }\n  }\n\n  var basicLength = output.length; // number of basic code points.\n  var handledCPCount = basicLength; // number of code points that have been handled;\n\n  // Finish the basic string with a delimiter unless it's empty.\n  if (basicLength) {\n    output.push(delimiter);\n  }\n\n  // Main encoding loop:\n  while (handledCPCount < inputLength) {\n    // All non-basic code points < n have been handled already. Find the next larger one:\n    var m = maxInt;\n    for (i = 0; i < input.length; i++) {\n      currentValue = input[i];\n      if (currentValue >= n && currentValue < m) {\n        m = currentValue;\n      }\n    }\n\n    // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n    var handledCPCountPlusOne = handledCPCount + 1;\n    if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n      throw RangeError(OVERFLOW_ERROR);\n    }\n\n    delta += (m - n) * handledCPCountPlusOne;\n    n = m;\n\n    for (i = 0; i < input.length; i++) {\n      currentValue = input[i];\n      if (currentValue < n && ++delta > maxInt) {\n        throw RangeError(OVERFLOW_ERROR);\n      }\n      if (currentValue == n) {\n        // Represent delta as a generalized variable-length integer.\n        var q = delta;\n        for (var k = base; /* no condition */; k += base) {\n          var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n          if (q < t) break;\n          var qMinusT = q - t;\n          var baseMinusT = base - t;\n          output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n          q = floor(qMinusT / baseMinusT);\n        }\n\n        output.push(stringFromCharCode(digitToBasic(q)));\n        bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n        delta = 0;\n        ++handledCPCount;\n      }\n    }\n\n    ++delta;\n    ++n;\n  }\n  return output.join('');\n};\n\nmodule.exports = function (input) {\n  var encoded = [];\n  var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n  var i, label;\n  for (i = 0; i < labels.length; i++) {\n    label = labels[i];\n    encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n  }\n  return encoded.join('.');\n};\n\n\n/***/ }),\n\n/***/ 6091:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar whitespaces = __webpack_require__(1361);\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\n\n/***/ }),\n\n/***/ 3111:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar requireObjectCoercible = __webpack_require__(4488);\nvar whitespaces = __webpack_require__(1361);\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\n\n/***/ }),\n\n/***/ 1400:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\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\n\n/***/ }),\n\n/***/ 7067:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n  if (it === undefined) return 0;\n  var number = toInteger(it);\n  var length = toLength(number);\n  if (number !== length) throw RangeError('Wrong length or index');\n  return length;\n};\n\n\n/***/ }),\n\n/***/ 5656:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(8361);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ 9958:\n/***/ (function(module) {\n\nvar 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\n\n/***/ }),\n\n/***/ 7466:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\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\n\n/***/ }),\n\n/***/ 7908:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar requireObjectCoercible = __webpack_require__(4488);\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ 4590:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toPositiveInteger = __webpack_require__(3002);\n\nmodule.exports = function (it, BYTES) {\n  var offset = toPositiveInteger(it);\n  if (offset % BYTES) throw RangeError('Wrong offset');\n  return offset;\n};\n\n\n/***/ }),\n\n/***/ 3002:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\n\nmodule.exports = function (it) {\n  var result = toInteger(it);\n  if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 7593:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\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\n\n/***/ }),\n\n/***/ 1694:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ 9843:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(3832);\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar ArrayBufferModule = __webpack_require__(3331);\nvar anInstance = __webpack_require__(5787);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar toLength = __webpack_require__(7466);\nvar toIndex = __webpack_require__(7067);\nvar toOffset = __webpack_require__(4590);\nvar toPrimitive = __webpack_require__(7593);\nvar has = __webpack_require__(6656);\nvar classof = __webpack_require__(648);\nvar isObject = __webpack_require__(111);\nvar create = __webpack_require__(30);\nvar setPrototypeOf = __webpack_require__(7674);\nvar getOwnPropertyNames = __webpack_require__(8006).f;\nvar typedArrayFrom = __webpack_require__(7321);\nvar forEach = __webpack_require__(2092).forEach;\nvar setSpecies = __webpack_require__(6340);\nvar definePropertyModule = __webpack_require__(3070);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar InternalStateModule = __webpack_require__(9909);\nvar inheritIfRequired = __webpack_require__(9587);\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n  var index = 0;\n  var length = list.length;\n  var result = new (aTypedArrayConstructor(C))(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n\nvar addGetter = function (it, key) {\n  nativeDefineProperty(it, key, { get: function () {\n    return getInternalState(this)[key];\n  } });\n};\n\nvar isArrayBuffer = function (it) {\n  var klass;\n  return it instanceof ArrayBuffer || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n  return isTypedArray(target)\n    && typeof key != 'symbol'\n    && key in target\n    && String(+key) == String(key);\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n  return isTypedArrayIndex(target, key = toPrimitive(key, true))\n    ? createPropertyDescriptor(2, target[key])\n    : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n  if (isTypedArrayIndex(target, key = toPrimitive(key, true))\n    && isObject(descriptor)\n    && has(descriptor, 'value')\n    && !has(descriptor, 'get')\n    && !has(descriptor, 'set')\n    // TODO: add validation descriptor w/o calling accessors\n    && !descriptor.configurable\n    && (!has(descriptor, 'writable') || descriptor.writable)\n    && (!has(descriptor, 'enumerable') || descriptor.enumerable)\n  ) {\n    target[key] = descriptor.value;\n    return target;\n  } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n  if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n    getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n    definePropertyModule.f = wrappedDefineProperty;\n    addGetter(TypedArrayPrototype, 'buffer');\n    addGetter(TypedArrayPrototype, 'byteOffset');\n    addGetter(TypedArrayPrototype, 'byteLength');\n    addGetter(TypedArrayPrototype, 'length');\n  }\n\n  $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n    getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n    defineProperty: wrappedDefineProperty\n  });\n\n  module.exports = function (TYPE, wrapper, CLAMPED) {\n    var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n    var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n    var GETTER = 'get' + TYPE;\n    var SETTER = 'set' + TYPE;\n    var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n    var TypedArrayConstructor = NativeTypedArrayConstructor;\n    var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n    var exported = {};\n\n    var getter = function (that, index) {\n      var data = getInternalState(that);\n      return data.view[GETTER](index * BYTES + data.byteOffset, true);\n    };\n\n    var setter = function (that, index, value) {\n      var data = getInternalState(that);\n      if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n      data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n    };\n\n    var addElement = function (that, index) {\n      nativeDefineProperty(that, index, {\n        get: function () {\n          return getter(this, index);\n        },\n        set: function (value) {\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n\n    if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n      TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n        anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME);\n        var index = 0;\n        var byteOffset = 0;\n        var buffer, byteLength, length;\n        if (!isObject(data)) {\n          length = toIndex(data);\n          byteLength = length * BYTES;\n          buffer = new ArrayBuffer(byteLength);\n        } else if (isArrayBuffer(data)) {\n          buffer = data;\n          byteOffset = toOffset(offset, BYTES);\n          var $len = data.byteLength;\n          if ($length === undefined) {\n            if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n            byteLength = $len - byteOffset;\n            if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if (isTypedArray(data)) {\n          return fromList(TypedArrayConstructor, data);\n        } else {\n          return typedArrayFrom.call(TypedArrayConstructor, data);\n        }\n        setInternalState(that, {\n          buffer: buffer,\n          byteOffset: byteOffset,\n          byteLength: byteLength,\n          length: length,\n          view: new DataView(buffer)\n        });\n        while (index < length) addElement(that, index++);\n      });\n\n      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n      TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n    } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n      TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n        anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME);\n        return inheritIfRequired(function () {\n          if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n          if (isArrayBuffer(data)) return $length !== undefined\n            ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n            : typedArrayOffset !== undefined\n              ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n              : new NativeTypedArrayConstructor(data);\n          if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n          return typedArrayFrom.call(TypedArrayConstructor, data);\n        }(), dummy, TypedArrayConstructor);\n      });\n\n      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n      forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n        if (!(key in TypedArrayConstructor)) {\n          createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n        }\n      });\n      TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n    }\n\n    if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n    }\n\n    if (TYPED_ARRAY_TAG) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n    }\n\n    exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n    $({\n      global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n    }, exported);\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n      createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n    }\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n    }\n\n    setSpecies(CONSTRUCTOR_NAME);\n  };\n} else module.exports = function () { /* empty */ };\n\n\n/***/ }),\n\n/***/ 3832:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-new -- required for testing */\nvar global = __webpack_require__(7854);\nvar fails = __webpack_require__(7293);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\nvar NATIVE_ARRAY_BUFFER_VIEWS = __webpack_require__(260).NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n  Int8Array(1);\n}) || !fails(function () {\n  new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n  new Int8Array();\n  new Int8Array(null);\n  new Int8Array(1.5);\n  new Int8Array(iterable);\n}, true) || fails(function () {\n  // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n  return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n\n\n/***/ }),\n\n/***/ 3074:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aTypedArrayConstructor = __webpack_require__(260).aTypedArrayConstructor;\nvar speciesConstructor = __webpack_require__(6707);\n\nmodule.exports = function (instance, list) {\n  var C = speciesConstructor(instance, instance.constructor);\n  var index = 0;\n  var length = list.length;\n  var result = new (aTypedArrayConstructor(C))(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 7321:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toObject = __webpack_require__(7908);\nvar toLength = __webpack_require__(7466);\nvar getIteratorMethod = __webpack_require__(1246);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar bind = __webpack_require__(9974);\nvar aTypedArrayConstructor = __webpack_require__(260).aTypedArrayConstructor;\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n  var O = toObject(source);\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 i, length, result, step, iterator, next;\n  if (iteratorMethod != undefined && !isArrayIteratorMethod(iteratorMethod)) {\n    iterator = iteratorMethod.call(O);\n    next = iterator.next;\n    O = [];\n    while (!(step = next.call(iterator)).done) {\n      O.push(step.value);\n    }\n  }\n  if (mapping && argumentsLength > 2) {\n    mapfn = bind(mapfn, arguments[2], 2);\n  }\n  length = toLength(O.length);\n  result = new (aTypedArrayConstructor(this))(length);\n  for (i = 0; length > i; i++) {\n    result[i] = mapping ? mapfn(O[i], i) : O[i];\n  }\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 9711:\n/***/ (function(module) {\n\nvar id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n\n\n/***/ }),\n\n/***/ 3307:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_SYMBOL = __webpack_require__(133);\n\nmodule.exports = NATIVE_SYMBOL\n  /* global Symbol -- safe */\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n\n\n/***/ }),\n\n/***/ 5112:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar shared = __webpack_require__(2309);\nvar has = __webpack_require__(6656);\nvar uid = __webpack_require__(9711);\nvar NATIVE_SYMBOL = __webpack_require__(133);\nvar USE_SYMBOL_AS_UID = __webpack_require__(3307);\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)) {\n    if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n    else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ }),\n\n/***/ 1361:\n/***/ (function(module) {\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\n\n/***/ }),\n\n/***/ 8264:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar arrayBufferModule = __webpack_require__(3331);\nvar setSpecies = __webpack_require__(6340);\n\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\n\n// `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n$({ global: true, forced: NativeArrayBuffer !== ArrayBuffer }, {\n  ArrayBuffer: ArrayBuffer\n});\n\nsetSpecies(ARRAY_BUFFER);\n\n\n/***/ }),\n\n/***/ 2222:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar fails = __webpack_require__(7293);\nvar isArray = __webpack_require__(3157);\nvar isObject = __webpack_require__(111);\nvar toObject = __webpack_require__(7908);\nvar toLength = __webpack_require__(7466);\nvar createProperty = __webpack_require__(6135);\nvar arraySpeciesCreate = __webpack_require__(5417);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar V8_VERSION = __webpack_require__(7392);\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\n\n/***/ }),\n\n/***/ 7327:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $filter = __webpack_require__(2092).filter;\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\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\n\n/***/ }),\n\n/***/ 2772:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $indexOf = __webpack_require__(1318).indexOf;\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, {\n  indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n    return NEGATIVE_ZERO\n      // convert -0 to +0\n      ? nativeIndexOf.apply(this, arguments) || 0\n      : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ 6992:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toIndexedObject = __webpack_require__(5656);\nvar addToUnscopables = __webpack_require__(1223);\nvar Iterators = __webpack_require__(7497);\nvar InternalStateModule = __webpack_require__(9909);\nvar defineIterator = __webpack_require__(654);\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n\n/***/ 1249:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $map = __webpack_require__(2092).map;\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\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\n\n/***/ }),\n\n/***/ 7042:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar isObject = __webpack_require__(111);\nvar isArray = __webpack_require__(3157);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toLength = __webpack_require__(7466);\nvar toIndexedObject = __webpack_require__(5656);\nvar createProperty = __webpack_require__(6135);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\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\n\n/***/ }),\n\n/***/ 561:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\nvar toObject = __webpack_require__(7908);\nvar arraySpeciesCreate = __webpack_require__(5417);\nvar createProperty = __webpack_require__(6135);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\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\n\n/***/ }),\n\n/***/ 8309:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar defineProperty = __webpack_require__(3070).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\n\n/***/ }),\n\n/***/ 489:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar fails = __webpack_require__(7293);\nvar toObject = __webpack_require__(7908);\nvar nativeGetPrototypeOf = __webpack_require__(9518);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n  getPrototypeOf: function getPrototypeOf(it) {\n    return nativeGetPrototypeOf(toObject(it));\n  }\n});\n\n\n\n/***/ }),\n\n/***/ 1539:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar redefine = __webpack_require__(1320);\nvar toString = __webpack_require__(288);\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\n\n/***/ }),\n\n/***/ 4916:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar exec = __webpack_require__(2261);\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\n\n/***/ }),\n\n/***/ 9714:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar redefine = __webpack_require__(1320);\nvar anObject = __webpack_require__(9670);\nvar fails = __webpack_require__(7293);\nvar flags = __webpack_require__(7066);\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n  redefine(RegExp.prototype, TO_STRING, function toString() {\n    var R = anObject(this);\n    var p = String(R.source);\n    var rf = R.flags;\n    var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n    return '/' + p + '/' + f;\n  }, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 8783:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = __webpack_require__(8710).charAt;\nvar InternalStateModule = __webpack_require__(9909);\nvar defineIterator = __webpack_require__(654);\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\n\n/***/ }),\n\n/***/ 4723:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar anObject = __webpack_require__(9670);\nvar toLength = __webpack_require__(7466);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar advanceStringIndex = __webpack_require__(1530);\nvar regExpExec = __webpack_require__(7651);\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\n\n/***/ }),\n\n/***/ 5306:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar anObject = __webpack_require__(9670);\nvar toLength = __webpack_require__(7466);\nvar toInteger = __webpack_require__(9958);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar advanceStringIndex = __webpack_require__(1530);\nvar getSubstitution = __webpack_require__(647);\nvar regExpExec = __webpack_require__(7651);\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\n\n/***/ }),\n\n/***/ 3123:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar isRegExp = __webpack_require__(7850);\nvar anObject = __webpack_require__(9670);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar speciesConstructor = __webpack_require__(6707);\nvar advanceStringIndex = __webpack_require__(1530);\nvar toLength = __webpack_require__(7466);\nvar callRegExpExec = __webpack_require__(7651);\nvar regexpExec = __webpack_require__(2261);\nvar fails = __webpack_require__(7293);\n\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\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                  (SUPPORTS_Y ? 'y' : 'g');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', 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 = SUPPORTS_Y ? q : 0;\n        var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n        var e;\n        if (\n          z === null ||\n          (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), 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}, !SUPPORTS_Y);\n\n\n/***/ }),\n\n/***/ 3210:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $trim = __webpack_require__(3111).trim;\nvar forcedStringTrimMethod = __webpack_require__(6091);\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\n\n/***/ }),\n\n/***/ 2990:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $copyWithin = __webpack_require__(1048);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n  return $copyWithin.call(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 8927:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $every = __webpack_require__(2092).every;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n  return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3105:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $fill = __webpack_require__(1285);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n  return $fill.apply(aTypedArray(this), arguments);\n});\n\n\n/***/ }),\n\n/***/ 5035:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $filter = __webpack_require__(2092).filter;\nvar fromSpeciesAndList = __webpack_require__(3074);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n  var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  return fromSpeciesAndList(this, list);\n});\n\n\n/***/ }),\n\n/***/ 7174:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $findIndex = __webpack_require__(2092).findIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n  return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4345:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $find = __webpack_require__(2092).find;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n  return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 2846:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $forEach = __webpack_require__(2092).forEach;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n  $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4731:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $includes = __webpack_require__(1318).includes;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n  return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 7209:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $indexOf = __webpack_require__(1318).indexOf;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n  return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 6319:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar ArrayIterators = __webpack_require__(6992);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = ArrayIterators.values;\nvar arrayKeys = ArrayIterators.keys;\nvar arrayEntries = ArrayIterators.entries;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];\n\nvar CORRECT_ITER_NAME = !!nativeTypedArrayIterator\n  && (nativeTypedArrayIterator.name == 'values' || nativeTypedArrayIterator.name == undefined);\n\nvar typedArrayValues = function values() {\n  return arrayValues.call(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n  return arrayEntries.call(aTypedArray(this));\n});\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n  return arrayKeys.call(aTypedArray(this));\n});\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, !CORRECT_ITER_NAME);\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, !CORRECT_ITER_NAME);\n\n\n/***/ }),\n\n/***/ 8867:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = [].join;\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('join', function join(separator) {\n  return $join.apply(aTypedArray(this), arguments);\n});\n\n\n/***/ }),\n\n/***/ 7789:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $lastIndexOf = __webpack_require__(6583);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n  return $lastIndexOf.apply(aTypedArray(this), arguments);\n});\n\n\n/***/ }),\n\n/***/ 3739:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $map = __webpack_require__(2092).map;\nvar speciesConstructor = __webpack_require__(6707);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n  return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n    return new (aTypedArrayConstructor(speciesConstructor(O, O.constructor)))(length);\n  });\n});\n\n\n/***/ }),\n\n/***/ 4483:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $reduceRight = __webpack_require__(3671).right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n  return $reduceRight(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 9368:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $reduce = __webpack_require__(3671).left;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n  return $reduce(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 2056:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n  var that = this;\n  var length = aTypedArray(that).length;\n  var middle = floor(length / 2);\n  var index = 0;\n  var value;\n  while (index < middle) {\n    value = that[index];\n    that[index++] = that[--length];\n    that[length] = value;\n  } return that;\n});\n\n\n/***/ }),\n\n/***/ 3462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar toLength = __webpack_require__(7466);\nvar toOffset = __webpack_require__(4590);\nvar toObject = __webpack_require__(7908);\nvar fails = __webpack_require__(7293);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n  /* global Int8Array -- safe */\n  new Int8Array(1).set({});\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n  aTypedArray(this);\n  var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n  var length = this.length;\n  var src = toObject(arrayLike);\n  var len = toLength(src.length);\n  var index = 0;\n  if (len + offset > length) throw RangeError('Wrong length');\n  while (index < len) this[offset + index] = src[index++];\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 678:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar speciesConstructor = __webpack_require__(6707);\nvar fails = __webpack_require__(7293);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $slice = [].slice;\n\nvar FORCED = fails(function () {\n  /* global Int8Array -- safe */\n  new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n  var list = $slice.call(aTypedArray(this), start, end);\n  var C = speciesConstructor(this, this.constructor);\n  var index = 0;\n  var length = list.length;\n  var result = new (aTypedArrayConstructor(C))(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 7462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $some = __webpack_require__(2092).some;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n  return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3824:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $sort = [].sort;\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n  return $sort.call(aTypedArray(this), comparefn);\n});\n\n\n/***/ }),\n\n/***/ 5021:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar toLength = __webpack_require__(7466);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar speciesConstructor = __webpack_require__(6707);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n  var O = aTypedArray(this);\n  var length = O.length;\n  var beginIndex = toAbsoluteIndex(begin, length);\n  return new (speciesConstructor(O, O.constructor))(\n    O.buffer,\n    O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n    toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n  );\n});\n\n\n/***/ }),\n\n/***/ 2974:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar fails = __webpack_require__(7293);\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\nvar $slice = [].slice;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n  $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n  return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n  Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n  return $toLocaleString.apply(TO_LOCALE_STRING_BUG ? $slice.call(aTypedArray(this)) : aTypedArray(this), arguments);\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 5016:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar exportTypedArrayMethod = __webpack_require__(260).exportTypedArrayMethod;\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar arrayJoin = [].join;\n\nif (fails(function () { arrayToString.call({}); })) {\n  arrayToString = function toString() {\n    return arrayJoin.call(this);\n  };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n\n\n/***/ }),\n\n/***/ 2472:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n  return function Uint8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 4747:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DOMIterables = __webpack_require__(8324);\nvar forEach = __webpack_require__(8533);\nvar createNonEnumerableProperty = __webpack_require__(8880);\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\n\n/***/ }),\n\n/***/ 3948:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DOMIterables = __webpack_require__(8324);\nvar ArrayIteratorMethods = __webpack_require__(6992);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n}\n\n\n/***/ }),\n\n/***/ 1637:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\n__webpack_require__(6992);\nvar $ = __webpack_require__(2109);\nvar getBuiltIn = __webpack_require__(5005);\nvar USE_NATIVE_URL = __webpack_require__(590);\nvar redefine = __webpack_require__(1320);\nvar redefineAll = __webpack_require__(2248);\nvar setToStringTag = __webpack_require__(8003);\nvar createIteratorConstructor = __webpack_require__(4994);\nvar InternalStateModule = __webpack_require__(9909);\nvar anInstance = __webpack_require__(5787);\nvar hasOwn = __webpack_require__(6656);\nvar bind = __webpack_require__(9974);\nvar classof = __webpack_require__(648);\nvar anObject = __webpack_require__(9670);\nvar isObject = __webpack_require__(111);\nvar create = __webpack_require__(30);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar getIterator = __webpack_require__(8554);\nvar getIteratorMethod = __webpack_require__(1246);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar $fetch = getBuiltIn('fetch');\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n  return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n  try {\n    return decodeURIComponent(sequence);\n  } catch (error) {\n    return sequence;\n  }\n};\n\nvar deserialize = function (it) {\n  var result = it.replace(plus, ' ');\n  var bytes = 4;\n  try {\n    return decodeURIComponent(result);\n  } catch (error) {\n    while (bytes) {\n      result = result.replace(percentSequence(bytes--), percentDecode);\n    }\n    return result;\n  }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n  '!': '%21',\n  \"'\": '%27',\n  '(': '%28',\n  ')': '%29',\n  '~': '%7E',\n  '%20': '+'\n};\n\nvar replacer = function (match) {\n  return replace[match];\n};\n\nvar serialize = function (it) {\n  return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n  if (query) {\n    var attributes = query.split('&');\n    var index = 0;\n    var attribute, entry;\n    while (index < attributes.length) {\n      attribute = attributes[index++];\n      if (attribute.length) {\n        entry = attribute.split('=');\n        result.push({\n          key: deserialize(entry.shift()),\n          value: deserialize(entry.join('='))\n        });\n      }\n    }\n  }\n};\n\nvar updateSearchParams = function (query) {\n  this.entries.length = 0;\n  parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n  if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n  setInternalState(this, {\n    type: URL_SEARCH_PARAMS_ITERATOR,\n    iterator: getIterator(getInternalParamsState(params).entries),\n    kind: kind\n  });\n}, 'Iterator', function next() {\n  var state = getInternalIteratorState(this);\n  var kind = state.kind;\n  var step = state.iterator.next();\n  var entry = step.value;\n  if (!step.done) {\n    step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n  } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n  anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n  var init = arguments.length > 0 ? arguments[0] : undefined;\n  var that = this;\n  var entries = [];\n  var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n  setInternalState(that, {\n    type: URL_SEARCH_PARAMS,\n    entries: entries,\n    updateURL: function () { /* empty */ },\n    updateSearchParams: updateSearchParams\n  });\n\n  if (init !== undefined) {\n    if (isObject(init)) {\n      iteratorMethod = getIteratorMethod(init);\n      if (typeof iteratorMethod === 'function') {\n        iterator = iteratorMethod.call(init);\n        next = iterator.next;\n        while (!(step = next.call(iterator)).done) {\n          entryIterator = getIterator(anObject(step.value));\n          entryNext = entryIterator.next;\n          if (\n            (first = entryNext.call(entryIterator)).done ||\n            (second = entryNext.call(entryIterator)).done ||\n            !entryNext.call(entryIterator).done\n          ) throw TypeError('Expected sequence with length 2');\n          entries.push({ key: first.value + '', value: second.value + '' });\n        }\n      } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });\n    } else {\n      parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\n    }\n  }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n  // `URLSearchParams.prototype.append` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n  append: function append(name, value) {\n    validateArgumentsLength(arguments.length, 2);\n    var state = getInternalParamsState(this);\n    state.entries.push({ key: name + '', value: value + '' });\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.delete` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n  'delete': function (name) {\n    validateArgumentsLength(arguments.length, 1);\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    var key = name + '';\n    var index = 0;\n    while (index < entries.length) {\n      if (entries[index].key === key) entries.splice(index, 1);\n      else index++;\n    }\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.get` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n  get: function get(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var index = 0;\n    for (; index < entries.length; index++) {\n      if (entries[index].key === key) return entries[index].value;\n    }\n    return null;\n  },\n  // `URLSearchParams.prototype.getAll` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n  getAll: function getAll(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var result = [];\n    var index = 0;\n    for (; index < entries.length; index++) {\n      if (entries[index].key === key) result.push(entries[index].value);\n    }\n    return result;\n  },\n  // `URLSearchParams.prototype.has` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n  has: function has(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var index = 0;\n    while (index < entries.length) {\n      if (entries[index++].key === key) return true;\n    }\n    return false;\n  },\n  // `URLSearchParams.prototype.set` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n  set: function set(name, value) {\n    validateArgumentsLength(arguments.length, 1);\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    var found = false;\n    var key = name + '';\n    var val = value + '';\n    var index = 0;\n    var entry;\n    for (; index < entries.length; index++) {\n      entry = entries[index];\n      if (entry.key === key) {\n        if (found) entries.splice(index--, 1);\n        else {\n          found = true;\n          entry.value = val;\n        }\n      }\n    }\n    if (!found) entries.push({ key: key, value: val });\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.sort` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n  sort: function sort() {\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    // Array#sort is not stable in some engines\n    var slice = entries.slice();\n    var entry, entriesIndex, sliceIndex;\n    entries.length = 0;\n    for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n      entry = slice[sliceIndex];\n      for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n        if (entries[entriesIndex].key > entry.key) {\n          entries.splice(entriesIndex, 0, entry);\n          break;\n        }\n      }\n      if (entriesIndex === sliceIndex) entries.push(entry);\n    }\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.forEach` method\n  forEach: function forEach(callback /* , thisArg */) {\n    var entries = getInternalParamsState(this).entries;\n    var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n    var index = 0;\n    var entry;\n    while (index < entries.length) {\n      entry = entries[index++];\n      boundFunction(entry.value, entry.key, this);\n    }\n  },\n  // `URLSearchParams.prototype.keys` method\n  keys: function keys() {\n    return new URLSearchParamsIterator(this, 'keys');\n  },\n  // `URLSearchParams.prototype.values` method\n  values: function values() {\n    return new URLSearchParamsIterator(this, 'values');\n  },\n  // `URLSearchParams.prototype.entries` method\n  entries: function entries() {\n    return new URLSearchParamsIterator(this, 'entries');\n  }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n  var entries = getInternalParamsState(this).entries;\n  var result = [];\n  var index = 0;\n  var entry;\n  while (index < entries.length) {\n    entry = entries[index++];\n    result.push(serialize(entry.key) + '=' + serialize(entry.value));\n  } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n  URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` for correct work with polyfilled `URLSearchParams`\n// https://github.com/zloirock/core-js/issues/674\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\n  $({ global: true, enumerable: true, forced: true }, {\n    fetch: function fetch(input /* , init */) {\n      var args = [input];\n      var init, body, headers;\n      if (arguments.length > 1) {\n        init = arguments[1];\n        if (isObject(init)) {\n          body = init.body;\n          if (classof(body) === URL_SEARCH_PARAMS) {\n            headers = init.headers ? new Headers(init.headers) : new Headers();\n            if (!headers.has('content-type')) {\n              headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n            }\n            init = create(init, {\n              body: createPropertyDescriptor(0, String(body)),\n              headers: createPropertyDescriptor(0, headers)\n            });\n          }\n        }\n        args.push(init);\n      } return $fetch.apply(this, args);\n    }\n  });\n}\n\nmodule.exports = {\n  URLSearchParams: URLSearchParamsConstructor,\n  getState: getInternalParamsState\n};\n\n\n/***/ }),\n\n/***/ 285:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\n__webpack_require__(8783);\nvar $ = __webpack_require__(2109);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar USE_NATIVE_URL = __webpack_require__(590);\nvar global = __webpack_require__(7854);\nvar defineProperties = __webpack_require__(6048);\nvar redefine = __webpack_require__(1320);\nvar anInstance = __webpack_require__(5787);\nvar has = __webpack_require__(6656);\nvar assign = __webpack_require__(1574);\nvar arrayFrom = __webpack_require__(8457);\nvar codeAt = __webpack_require__(8710).codeAt;\nvar toASCII = __webpack_require__(3197);\nvar setToStringTag = __webpack_require__(8003);\nvar URLSearchParamsModule = __webpack_require__(1637);\nvar InternalStateModule = __webpack_require__(9909);\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^(0x|0X)/;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n/* eslint-disable no-control-regex -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\t\\u000A\\u000D #%/:?@[\\\\]]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\t\\u000A\\u000D #/:?@[\\\\]]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\u000A\\u000D]/g;\n/* eslint-enable no-control-regex -- safe */\nvar EOF;\n\nvar parseHost = function (url, input) {\n  var result, codePoints, index;\n  if (input.charAt(0) == '[') {\n    if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n    result = parseIPv6(input.slice(1, -1));\n    if (!result) return INVALID_HOST;\n    url.host = result;\n  // opaque host\n  } else if (!isSpecial(url)) {\n    if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n    result = '';\n    codePoints = arrayFrom(input);\n    for (index = 0; index < codePoints.length; index++) {\n      result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n    }\n    url.host = result;\n  } else {\n    input = toASCII(input);\n    if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n    result = parseIPv4(input);\n    if (result === null) return INVALID_HOST;\n    url.host = result;\n  }\n};\n\nvar parseIPv4 = function (input) {\n  var parts = input.split('.');\n  var partsLength, numbers, index, part, radix, number, ipv4;\n  if (parts.length && parts[parts.length - 1] == '') {\n    parts.pop();\n  }\n  partsLength = parts.length;\n  if (partsLength > 4) return input;\n  numbers = [];\n  for (index = 0; index < partsLength; index++) {\n    part = parts[index];\n    if (part == '') return input;\n    radix = 10;\n    if (part.length > 1 && part.charAt(0) == '0') {\n      radix = HEX_START.test(part) ? 16 : 8;\n      part = part.slice(radix == 8 ? 1 : 2);\n    }\n    if (part === '') {\n      number = 0;\n    } else {\n      if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n      number = parseInt(part, radix);\n    }\n    numbers.push(number);\n  }\n  for (index = 0; index < partsLength; index++) {\n    number = numbers[index];\n    if (index == partsLength - 1) {\n      if (number >= pow(256, 5 - partsLength)) return null;\n    } else if (number > 255) return null;\n  }\n  ipv4 = numbers.pop();\n  for (index = 0; index < numbers.length; index++) {\n    ipv4 += numbers[index] * pow(256, 3 - index);\n  }\n  return ipv4;\n};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n  var address = [0, 0, 0, 0, 0, 0, 0, 0];\n  var pieceIndex = 0;\n  var compress = null;\n  var pointer = 0;\n  var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n  var char = function () {\n    return input.charAt(pointer);\n  };\n\n  if (char() == ':') {\n    if (input.charAt(1) != ':') return;\n    pointer += 2;\n    pieceIndex++;\n    compress = pieceIndex;\n  }\n  while (char()) {\n    if (pieceIndex == 8) return;\n    if (char() == ':') {\n      if (compress !== null) return;\n      pointer++;\n      pieceIndex++;\n      compress = pieceIndex;\n      continue;\n    }\n    value = length = 0;\n    while (length < 4 && HEX.test(char())) {\n      value = value * 16 + parseInt(char(), 16);\n      pointer++;\n      length++;\n    }\n    if (char() == '.') {\n      if (length == 0) return;\n      pointer -= length;\n      if (pieceIndex > 6) return;\n      numbersSeen = 0;\n      while (char()) {\n        ipv4Piece = null;\n        if (numbersSeen > 0) {\n          if (char() == '.' && numbersSeen < 4) pointer++;\n          else return;\n        }\n        if (!DIGIT.test(char())) return;\n        while (DIGIT.test(char())) {\n          number = parseInt(char(), 10);\n          if (ipv4Piece === null) ipv4Piece = number;\n          else if (ipv4Piece == 0) return;\n          else ipv4Piece = ipv4Piece * 10 + number;\n          if (ipv4Piece > 255) return;\n          pointer++;\n        }\n        address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n        numbersSeen++;\n        if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n      }\n      if (numbersSeen != 4) return;\n      break;\n    } else if (char() == ':') {\n      pointer++;\n      if (!char()) return;\n    } else if (char()) return;\n    address[pieceIndex++] = value;\n  }\n  if (compress !== null) {\n    swaps = pieceIndex - compress;\n    pieceIndex = 7;\n    while (pieceIndex != 0 && swaps > 0) {\n      swap = address[pieceIndex];\n      address[pieceIndex--] = address[compress + swaps - 1];\n      address[compress + --swaps] = swap;\n    }\n  } else if (pieceIndex != 8) return;\n  return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n  var maxIndex = null;\n  var maxLength = 1;\n  var currStart = null;\n  var currLength = 0;\n  var index = 0;\n  for (; index < 8; index++) {\n    if (ipv6[index] !== 0) {\n      if (currLength > maxLength) {\n        maxIndex = currStart;\n        maxLength = currLength;\n      }\n      currStart = null;\n      currLength = 0;\n    } else {\n      if (currStart === null) currStart = index;\n      ++currLength;\n    }\n  }\n  if (currLength > maxLength) {\n    maxIndex = currStart;\n    maxLength = currLength;\n  }\n  return maxIndex;\n};\n\nvar serializeHost = function (host) {\n  var result, index, compress, ignore0;\n  // ipv4\n  if (typeof host == 'number') {\n    result = [];\n    for (index = 0; index < 4; index++) {\n      result.unshift(host % 256);\n      host = floor(host / 256);\n    } return result.join('.');\n  // ipv6\n  } else if (typeof host == 'object') {\n    result = '';\n    compress = findLongestZeroSequence(host);\n    for (index = 0; index < 8; index++) {\n      if (ignore0 && host[index] === 0) continue;\n      if (ignore0) ignore0 = false;\n      if (compress === index) {\n        result += index ? ':' : '::';\n        ignore0 = true;\n      } else {\n        result += host[index].toString(16);\n        if (index < 7) result += ':';\n      }\n    }\n    return '[' + result + ']';\n  } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n  ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n  '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n  '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n  var code = codeAt(char, 0);\n  return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n  ftp: 21,\n  file: null,\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443\n};\n\nvar isSpecial = function (url) {\n  return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n  return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n  return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n  var second;\n  return string.length == 2 && ALPHA.test(string.charAt(0))\n    && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n  var third;\n  return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n    string.length == 2 ||\n    ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n  );\n};\n\nvar shortenURLsPath = function (url) {\n  var path = url.path;\n  var pathSize = path.length;\n  if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n    path.pop();\n  }\n};\n\nvar isSingleDot = function (segment) {\n  return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n  segment = segment.toLowerCase();\n  return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseURL = function (url, input, stateOverride, base) {\n  var state = stateOverride || SCHEME_START;\n  var pointer = 0;\n  var buffer = '';\n  var seenAt = false;\n  var seenBracket = false;\n  var seenPasswordToken = false;\n  var codePoints, char, bufferCodePoints, failure;\n\n  if (!stateOverride) {\n    url.scheme = '';\n    url.username = '';\n    url.password = '';\n    url.host = null;\n    url.port = null;\n    url.path = [];\n    url.query = null;\n    url.fragment = null;\n    url.cannotBeABaseURL = false;\n    input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n  }\n\n  input = input.replace(TAB_AND_NEW_LINE, '');\n\n  codePoints = arrayFrom(input);\n\n  while (pointer <= codePoints.length) {\n    char = codePoints[pointer];\n    switch (state) {\n      case SCHEME_START:\n        if (char && ALPHA.test(char)) {\n          buffer += char.toLowerCase();\n          state = SCHEME;\n        } else if (!stateOverride) {\n          state = NO_SCHEME;\n          continue;\n        } else return INVALID_SCHEME;\n        break;\n\n      case SCHEME:\n        if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n          buffer += char.toLowerCase();\n        } else if (char == ':') {\n          if (stateOverride && (\n            (isSpecial(url) != has(specialSchemes, buffer)) ||\n            (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n            (url.scheme == 'file' && !url.host)\n          )) return;\n          url.scheme = buffer;\n          if (stateOverride) {\n            if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n            return;\n          }\n          buffer = '';\n          if (url.scheme == 'file') {\n            state = FILE;\n          } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n            state = SPECIAL_RELATIVE_OR_AUTHORITY;\n          } else if (isSpecial(url)) {\n            state = SPECIAL_AUTHORITY_SLASHES;\n          } else if (codePoints[pointer + 1] == '/') {\n            state = PATH_OR_AUTHORITY;\n            pointer++;\n          } else {\n            url.cannotBeABaseURL = true;\n            url.path.push('');\n            state = CANNOT_BE_A_BASE_URL_PATH;\n          }\n        } else if (!stateOverride) {\n          buffer = '';\n          state = NO_SCHEME;\n          pointer = 0;\n          continue;\n        } else return INVALID_SCHEME;\n        break;\n\n      case NO_SCHEME:\n        if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n        if (base.cannotBeABaseURL && char == '#') {\n          url.scheme = base.scheme;\n          url.path = base.path.slice();\n          url.query = base.query;\n          url.fragment = '';\n          url.cannotBeABaseURL = true;\n          state = FRAGMENT;\n          break;\n        }\n        state = base.scheme == 'file' ? FILE : RELATIVE;\n        continue;\n\n      case SPECIAL_RELATIVE_OR_AUTHORITY:\n        if (char == '/' && codePoints[pointer + 1] == '/') {\n          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n          pointer++;\n        } else {\n          state = RELATIVE;\n          continue;\n        } break;\n\n      case PATH_OR_AUTHORITY:\n        if (char == '/') {\n          state = AUTHORITY;\n          break;\n        } else {\n          state = PATH;\n          continue;\n        }\n\n      case RELATIVE:\n        url.scheme = base.scheme;\n        if (char == EOF) {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = base.query;\n        } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n          state = RELATIVE_SLASH;\n        } else if (char == '?') {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = '';\n          state = QUERY;\n        } else if (char == '#') {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = base.query;\n          url.fragment = '';\n          state = FRAGMENT;\n        } else {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.path.pop();\n          state = PATH;\n          continue;\n        } break;\n\n      case RELATIVE_SLASH:\n        if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n        } else if (char == '/') {\n          state = AUTHORITY;\n        } else {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          state = PATH;\n          continue;\n        } break;\n\n      case SPECIAL_AUTHORITY_SLASHES:\n        state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n        if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n        pointer++;\n        break;\n\n      case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n        if (char != '/' && char != '\\\\') {\n          state = AUTHORITY;\n          continue;\n        } break;\n\n      case AUTHORITY:\n        if (char == '@') {\n          if (seenAt) buffer = '%40' + buffer;\n          seenAt = true;\n          bufferCodePoints = arrayFrom(buffer);\n          for (var i = 0; i < bufferCodePoints.length; i++) {\n            var codePoint = bufferCodePoints[i];\n            if (codePoint == ':' && !seenPasswordToken) {\n              seenPasswordToken = true;\n              continue;\n            }\n            var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n            if (seenPasswordToken) url.password += encodedCodePoints;\n            else url.username += encodedCodePoints;\n          }\n          buffer = '';\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url))\n        ) {\n          if (seenAt && buffer == '') return INVALID_AUTHORITY;\n          pointer -= arrayFrom(buffer).length + 1;\n          buffer = '';\n          state = HOST;\n        } else buffer += char;\n        break;\n\n      case HOST:\n      case HOSTNAME:\n        if (stateOverride && url.scheme == 'file') {\n          state = FILE_HOST;\n          continue;\n        } else if (char == ':' && !seenBracket) {\n          if (buffer == '') return INVALID_HOST;\n          failure = parseHost(url, buffer);\n          if (failure) return failure;\n          buffer = '';\n          state = PORT;\n          if (stateOverride == HOSTNAME) return;\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url))\n        ) {\n          if (isSpecial(url) && buffer == '') return INVALID_HOST;\n          if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n          failure = parseHost(url, buffer);\n          if (failure) return failure;\n          buffer = '';\n          state = PATH_START;\n          if (stateOverride) return;\n          continue;\n        } else {\n          if (char == '[') seenBracket = true;\n          else if (char == ']') seenBracket = false;\n          buffer += char;\n        } break;\n\n      case PORT:\n        if (DIGIT.test(char)) {\n          buffer += char;\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url)) ||\n          stateOverride\n        ) {\n          if (buffer != '') {\n            var port = parseInt(buffer, 10);\n            if (port > 0xFFFF) return INVALID_PORT;\n            url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n            buffer = '';\n          }\n          if (stateOverride) return;\n          state = PATH_START;\n          continue;\n        } else return INVALID_PORT;\n        break;\n\n      case FILE:\n        url.scheme = 'file';\n        if (char == '/' || char == '\\\\') state = FILE_SLASH;\n        else if (base && base.scheme == 'file') {\n          if (char == EOF) {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = base.query;\n          } else if (char == '?') {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = '';\n            state = QUERY;\n          } else if (char == '#') {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = base.query;\n            url.fragment = '';\n            state = FRAGMENT;\n          } else {\n            if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n              url.host = base.host;\n              url.path = base.path.slice();\n              shortenURLsPath(url);\n            }\n            state = PATH;\n            continue;\n          }\n        } else {\n          state = PATH;\n          continue;\n        } break;\n\n      case FILE_SLASH:\n        if (char == '/' || char == '\\\\') {\n          state = FILE_HOST;\n          break;\n        }\n        if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n          if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n          else url.host = base.host;\n        }\n        state = PATH;\n        continue;\n\n      case FILE_HOST:\n        if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n          if (!stateOverride && isWindowsDriveLetter(buffer)) {\n            state = PATH;\n          } else if (buffer == '') {\n            url.host = '';\n            if (stateOverride) return;\n            state = PATH_START;\n          } else {\n            failure = parseHost(url, buffer);\n            if (failure) return failure;\n            if (url.host == 'localhost') url.host = '';\n            if (stateOverride) return;\n            buffer = '';\n            state = PATH_START;\n          } continue;\n        } else buffer += char;\n        break;\n\n      case PATH_START:\n        if (isSpecial(url)) {\n          state = PATH;\n          if (char != '/' && char != '\\\\') continue;\n        } else if (!stateOverride && char == '?') {\n          url.query = '';\n          state = QUERY;\n        } else if (!stateOverride && char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          state = PATH;\n          if (char != '/') continue;\n        } break;\n\n      case PATH:\n        if (\n          char == EOF || char == '/' ||\n          (char == '\\\\' && isSpecial(url)) ||\n          (!stateOverride && (char == '?' || char == '#'))\n        ) {\n          if (isDoubleDot(buffer)) {\n            shortenURLsPath(url);\n            if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n              url.path.push('');\n            }\n          } else if (isSingleDot(buffer)) {\n            if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n              url.path.push('');\n            }\n          } else {\n            if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n              if (url.host) url.host = '';\n              buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n            }\n            url.path.push(buffer);\n          }\n          buffer = '';\n          if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n            while (url.path.length > 1 && url.path[0] === '') {\n              url.path.shift();\n            }\n          }\n          if (char == '?') {\n            url.query = '';\n            state = QUERY;\n          } else if (char == '#') {\n            url.fragment = '';\n            state = FRAGMENT;\n          }\n        } else {\n          buffer += percentEncode(char, pathPercentEncodeSet);\n        } break;\n\n      case CANNOT_BE_A_BASE_URL_PATH:\n        if (char == '?') {\n          url.query = '';\n          state = QUERY;\n        } else if (char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n        } break;\n\n      case QUERY:\n        if (!stateOverride && char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          if (char == \"'\" && isSpecial(url)) url.query += '%27';\n          else if (char == '#') url.query += '%23';\n          else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n        } break;\n\n      case FRAGMENT:\n        if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n        break;\n    }\n\n    pointer++;\n  }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n  var that = anInstance(this, URLConstructor, 'URL');\n  var base = arguments.length > 1 ? arguments[1] : undefined;\n  var urlString = String(url);\n  var state = setInternalState(that, { type: 'URL' });\n  var baseState, failure;\n  if (base !== undefined) {\n    if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n    else {\n      failure = parseURL(baseState = {}, String(base));\n      if (failure) throw TypeError(failure);\n    }\n  }\n  failure = parseURL(state, urlString, null, baseState);\n  if (failure) throw TypeError(failure);\n  var searchParams = state.searchParams = new URLSearchParams();\n  var searchParamsState = getInternalSearchParamsState(searchParams);\n  searchParamsState.updateSearchParams(state.query);\n  searchParamsState.updateURL = function () {\n    state.query = String(searchParams) || null;\n  };\n  if (!DESCRIPTORS) {\n    that.href = serializeURL.call(that);\n    that.origin = getOrigin.call(that);\n    that.protocol = getProtocol.call(that);\n    that.username = getUsername.call(that);\n    that.password = getPassword.call(that);\n    that.host = getHost.call(that);\n    that.hostname = getHostname.call(that);\n    that.port = getPort.call(that);\n    that.pathname = getPathname.call(that);\n    that.search = getSearch.call(that);\n    that.searchParams = getSearchParams.call(that);\n    that.hash = getHash.call(that);\n  }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n  var url = getInternalURLState(this);\n  var scheme = url.scheme;\n  var username = url.username;\n  var password = url.password;\n  var host = url.host;\n  var port = url.port;\n  var path = url.path;\n  var query = url.query;\n  var fragment = url.fragment;\n  var output = scheme + ':';\n  if (host !== null) {\n    output += '//';\n    if (includesCredentials(url)) {\n      output += username + (password ? ':' + password : '') + '@';\n    }\n    output += serializeHost(host);\n    if (port !== null) output += ':' + port;\n  } else if (scheme == 'file') output += '//';\n  output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n  if (query !== null) output += '?' + query;\n  if (fragment !== null) output += '#' + fragment;\n  return output;\n};\n\nvar getOrigin = function () {\n  var url = getInternalURLState(this);\n  var scheme = url.scheme;\n  var port = url.port;\n  if (scheme == 'blob') try {\n    return new URL(scheme.path[0]).origin;\n  } catch (error) {\n    return 'null';\n  }\n  if (scheme == 'file' || !isSpecial(url)) return 'null';\n  return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n  return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n  return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n  return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n  var url = getInternalURLState(this);\n  var host = url.host;\n  var port = url.port;\n  return host === null ? ''\n    : port === null ? serializeHost(host)\n    : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n  var host = getInternalURLState(this).host;\n  return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n  var port = getInternalURLState(this).port;\n  return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n  var url = getInternalURLState(this);\n  var path = url.path;\n  return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n  var query = getInternalURLState(this).query;\n  return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n  return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n  var fragment = getInternalURLState(this).fragment;\n  return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n  return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n  defineProperties(URLPrototype, {\n    // `URL.prototype.href` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-href\n    href: accessorDescriptor(serializeURL, function (href) {\n      var url = getInternalURLState(this);\n      var urlString = String(href);\n      var failure = parseURL(url, urlString);\n      if (failure) throw TypeError(failure);\n      getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n    }),\n    // `URL.prototype.origin` getter\n    // https://url.spec.whatwg.org/#dom-url-origin\n    origin: accessorDescriptor(getOrigin),\n    // `URL.prototype.protocol` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-protocol\n    protocol: accessorDescriptor(getProtocol, function (protocol) {\n      var url = getInternalURLState(this);\n      parseURL(url, String(protocol) + ':', SCHEME_START);\n    }),\n    // `URL.prototype.username` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-username\n    username: accessorDescriptor(getUsername, function (username) {\n      var url = getInternalURLState(this);\n      var codePoints = arrayFrom(String(username));\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      url.username = '';\n      for (var i = 0; i < codePoints.length; i++) {\n        url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n      }\n    }),\n    // `URL.prototype.password` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-password\n    password: accessorDescriptor(getPassword, function (password) {\n      var url = getInternalURLState(this);\n      var codePoints = arrayFrom(String(password));\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      url.password = '';\n      for (var i = 0; i < codePoints.length; i++) {\n        url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n      }\n    }),\n    // `URL.prototype.host` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-host\n    host: accessorDescriptor(getHost, function (host) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      parseURL(url, String(host), HOST);\n    }),\n    // `URL.prototype.hostname` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-hostname\n    hostname: accessorDescriptor(getHostname, function (hostname) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      parseURL(url, String(hostname), HOSTNAME);\n    }),\n    // `URL.prototype.port` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-port\n    port: accessorDescriptor(getPort, function (port) {\n      var url = getInternalURLState(this);\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      port = String(port);\n      if (port == '') url.port = null;\n      else parseURL(url, port, PORT);\n    }),\n    // `URL.prototype.pathname` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-pathname\n    pathname: accessorDescriptor(getPathname, function (pathname) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      url.path = [];\n      parseURL(url, pathname + '', PATH_START);\n    }),\n    // `URL.prototype.search` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-search\n    search: accessorDescriptor(getSearch, function (search) {\n      var url = getInternalURLState(this);\n      search = String(search);\n      if (search == '') {\n        url.query = null;\n      } else {\n        if ('?' == search.charAt(0)) search = search.slice(1);\n        url.query = '';\n        parseURL(url, search, QUERY);\n      }\n      getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n    }),\n    // `URL.prototype.searchParams` getter\n    // https://url.spec.whatwg.org/#dom-url-searchparams\n    searchParams: accessorDescriptor(getSearchParams),\n    // `URL.prototype.hash` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-hash\n    hash: accessorDescriptor(getHash, function (hash) {\n      var url = getInternalURLState(this);\n      hash = String(hash);\n      if (hash == '') {\n        url.fragment = null;\n        return;\n      }\n      if ('#' == hash.charAt(0)) hash = hash.slice(1);\n      url.fragment = '';\n      parseURL(url, hash, FRAGMENT);\n    })\n  });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n  return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n  return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n  var nativeCreateObjectURL = NativeURL.createObjectURL;\n  var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n  // `URL.createObjectURL` method\n  // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n    return nativeCreateObjectURL.apply(NativeURL, arguments);\n  });\n  // `URL.revokeObjectURL` method\n  // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n    return nativeRevokeObjectURL.apply(NativeURL, arguments);\n  });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n  URL: URLConstructor\n});\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be in strict mode.\n!function() {\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"Dropzone\": function() { return /* reexport */ Dropzone; },\n  \"default\": function() { return /* binding */ dropzone_dist; }\n});\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.concat.js\nvar es_array_concat = __webpack_require__(2222);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.filter.js\nvar es_array_filter = __webpack_require__(7327);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.index-of.js\nvar es_array_index_of = __webpack_require__(2772);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.iterator.js\nvar es_array_iterator = __webpack_require__(6992);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.map.js\nvar es_array_map = __webpack_require__(1249);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.slice.js\nvar es_array_slice = __webpack_require__(7042);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.splice.js\nvar es_array_splice = __webpack_require__(561);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array-buffer.constructor.js\nvar es_array_buffer_constructor = __webpack_require__(8264);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js\nvar es_function_name = __webpack_require__(8309);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.get-prototype-of.js\nvar es_object_get_prototype_of = __webpack_require__(489);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.to-string.js\nvar es_object_to_string = __webpack_require__(1539);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js\nvar es_regexp_exec = __webpack_require__(4916);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.to-string.js\nvar es_regexp_to_string = __webpack_require__(9714);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.iterator.js\nvar es_string_iterator = __webpack_require__(8783);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.match.js\nvar es_string_match = __webpack_require__(4723);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js\nvar es_string_replace = __webpack_require__(5306);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.split.js\nvar es_string_split = __webpack_require__(3123);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.trim.js\nvar es_string_trim = __webpack_require__(3210);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.uint8-array.js\nvar es_typed_array_uint8_array = __webpack_require__(2472);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.copy-within.js\nvar es_typed_array_copy_within = __webpack_require__(2990);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.every.js\nvar es_typed_array_every = __webpack_require__(8927);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.fill.js\nvar es_typed_array_fill = __webpack_require__(3105);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.filter.js\nvar es_typed_array_filter = __webpack_require__(5035);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.find.js\nvar es_typed_array_find = __webpack_require__(4345);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.find-index.js\nvar es_typed_array_find_index = __webpack_require__(7174);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.for-each.js\nvar es_typed_array_for_each = __webpack_require__(2846);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.includes.js\nvar es_typed_array_includes = __webpack_require__(4731);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.index-of.js\nvar es_typed_array_index_of = __webpack_require__(7209);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.iterator.js\nvar es_typed_array_iterator = __webpack_require__(6319);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.join.js\nvar es_typed_array_join = __webpack_require__(8867);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.last-index-of.js\nvar es_typed_array_last_index_of = __webpack_require__(7789);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.map.js\nvar es_typed_array_map = __webpack_require__(3739);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.reduce.js\nvar es_typed_array_reduce = __webpack_require__(9368);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.reduce-right.js\nvar es_typed_array_reduce_right = __webpack_require__(4483);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.reverse.js\nvar es_typed_array_reverse = __webpack_require__(2056);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.set.js\nvar es_typed_array_set = __webpack_require__(3462);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.slice.js\nvar es_typed_array_slice = __webpack_require__(678);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.some.js\nvar es_typed_array_some = __webpack_require__(7462);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.sort.js\nvar es_typed_array_sort = __webpack_require__(3824);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.subarray.js\nvar es_typed_array_subarray = __webpack_require__(5021);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-locale-string.js\nvar es_typed_array_to_locale_string = __webpack_require__(2974);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-string.js\nvar es_typed_array_to_string = __webpack_require__(5016);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.for-each.js\nvar web_dom_collections_for_each = __webpack_require__(4747);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.iterator.js\nvar web_dom_collections_iterator = __webpack_require__(3948);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url.js\nvar web_url = __webpack_require__(285);\n;// CONCATENATED MODULE: ./src/emitter.js\n\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// The Emitter class provides the ability to call `.on()` on Dropzone to listen\n// to events.\n// It is strongly based on component's emitter class, and I removed the\n// functionality because of the dependency hell with different frameworks.\nvar Emitter = /*#__PURE__*/function () {\n  function Emitter() {\n    _classCallCheck(this, Emitter);\n  }\n\n  _createClass(Emitter, [{\n    key: \"on\",\n    value: // Add an event listener for given event\n    function on(event, fn) {\n      this._callbacks = this._callbacks || {}; // Create namespace for this event\n\n      if (!this._callbacks[event]) {\n        this._callbacks[event] = [];\n      }\n\n      this._callbacks[event].push(fn);\n\n      return this;\n    }\n  }, {\n    key: \"emit\",\n    value: function emit(event) {\n      this._callbacks = this._callbacks || {};\n      var callbacks = this._callbacks[event];\n\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      if (callbacks) {\n        var _iterator = _createForOfIteratorHelper(callbacks, true),\n            _step;\n\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var callback = _step.value;\n            callback.apply(this, args);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      } // trigger a corresponding DOM event\n\n\n      if (this.element) {\n        this.element.dispatchEvent(this.makeEvent(\"dropzone:\" + event, {\n          args: args\n        }));\n      }\n\n      return this;\n    }\n  }, {\n    key: \"makeEvent\",\n    value: function makeEvent(eventName, detail) {\n      var params = {\n        bubbles: true,\n        cancelable: true,\n        detail: detail\n      };\n\n      if (typeof window.CustomEvent === \"function\") {\n        return new CustomEvent(eventName, params);\n      } else {\n        // IE 11 support\n        // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n        var evt = document.createEvent(\"CustomEvent\");\n        evt.initCustomEvent(eventName, params.bubbles, params.cancelable, params.detail);\n        return evt;\n      }\n    } // Remove event listener for given event. If fn is not provided, all event\n    // listeners for that event will be removed. If neither is provided, all\n    // event listeners will be removed.\n\n  }, {\n    key: \"off\",\n    value: function off(event, fn) {\n      if (!this._callbacks || arguments.length === 0) {\n        this._callbacks = {};\n        return this;\n      } // specific event\n\n\n      var callbacks = this._callbacks[event];\n\n      if (!callbacks) {\n        return this;\n      } // remove all handlers\n\n\n      if (arguments.length === 1) {\n        delete this._callbacks[event];\n        return this;\n      } // remove specific handler\n\n\n      for (var i = 0; i < callbacks.length; i++) {\n        var callback = callbacks[i];\n\n        if (callback === fn) {\n          callbacks.splice(i, 1);\n          break;\n        }\n      }\n\n      return this;\n    }\n  }]);\n\n  return Emitter;\n}();\n\n\n;// CONCATENATED MODULE: ./src/preview-template.html\n// Module\nvar code = \"<div class=\\\"dz-preview dz-file-preview\\\"> <div class=\\\"dz-image\\\"><img data-dz-thumbnail/></div> <div class=\\\"dz-details\\\"> <div class=\\\"dz-size\\\"><span data-dz-size></span></div> <div class=\\\"dz-filename\\\"><span data-dz-name></span></div> </div> <div class=\\\"dz-progress\\\"> <span class=\\\"dz-upload\\\" data-dz-uploadprogress></span> </div> <div class=\\\"dz-error-message\\\"><span data-dz-errormessage></span></div> <div class=\\\"dz-success-mark\\\"> <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"> <title>Check</title> <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\"> <path d=\\\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\" stroke-opacity=\\\"0.198794158\\\" stroke=\\\"#747474\\\" fill-opacity=\\\"0.816519475\\\" fill=\\\"#FFFFFF\\\"></path> </g> </svg> </div> <div class=\\\"dz-error-mark\\\"> <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"> <title>Error</title> <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\"> <g stroke=\\\"#747474\\\" stroke-opacity=\\\"0.198794158\\\" fill=\\\"#FFFFFF\\\" fill-opacity=\\\"0.816519475\\\"> <path d=\\\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\"></path> </g> </g> </svg> </div> </div> \";\n// Exports\n/* harmony default export */ var preview_template = (code);\n;// CONCATENATED MODULE: ./src/options.js\n\n\n\n\n\nfunction options_createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = options_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction options_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return options_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return options_arrayLikeToArray(o, minLen); }\n\nfunction options_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\nvar defaultOptions = {\n  /**\n   * Has to be specified on elements other than form (or when the form\n   * doesn't have an `action` attribute). You can also\n   * provide a function that will be called with `files` and\n   * must return the url (since `v3.12.0`)\n   */\n  url: null,\n\n  /**\n   * Can be changed to `\"put\"` if necessary. You can also provide a function\n   * that will be called with `files` and must return the method (since `v3.12.0`).\n   */\n  method: \"post\",\n\n  /**\n   * Will be set on the XHRequest.\n   */\n  withCredentials: false,\n\n  /**\n   * The timeout for the XHR requests in milliseconds (since `v4.4.0`).\n   * If set to null or 0, no timeout is going to be set.\n   */\n  timeout: null,\n\n  /**\n   * How many file uploads to process in parallel (See the\n   * Enqueuing file uploads documentation section for more info)\n   */\n  parallelUploads: 2,\n\n  /**\n   * Whether to send multiple files in one request. If\n   * this it set to true, then the fallback file input element will\n   * have the `multiple` attribute as well. This option will\n   * also trigger additional events (like `processingmultiple`). See the events\n   * documentation section for more information.\n   */\n  uploadMultiple: false,\n\n  /**\n   * Whether you want files to be uploaded in chunks to your server. This can't be\n   * used in combination with `uploadMultiple`.\n   *\n   * See [chunksUploaded](#config-chunksUploaded) for the callback to finalise an upload.\n   */\n  chunking: false,\n\n  /**\n   * If `chunking` is enabled, this defines whether **every** file should be chunked,\n   * even if the file size is below chunkSize. This means, that the additional chunk\n   * form data will be submitted and the `chunksUploaded` callback will be invoked.\n   */\n  forceChunking: false,\n\n  /**\n   * If `chunking` is `true`, then this defines the chunk size in bytes.\n   */\n  chunkSize: 2000000,\n\n  /**\n   * If `true`, the individual chunks of a file are being uploaded simultaneously.\n   */\n  parallelChunkUploads: false,\n\n  /**\n   * Whether a chunk should be retried if it fails.\n   */\n  retryChunks: false,\n\n  /**\n   * If `retryChunks` is true, how many times should it be retried.\n   */\n  retryChunksLimit: 3,\n\n  /**\n   * The maximum filesize (in bytes) that is allowed to be uploaded.\n   */\n  maxFilesize: 256,\n\n  /**\n   * The name of the file param that gets transferred.\n   * **NOTE**: If you have the option  `uploadMultiple` set to `true`, then\n   * Dropzone will append `[]` to the name.\n   */\n  paramName: \"file\",\n\n  /**\n   * Whether thumbnails for images should be generated\n   */\n  createImageThumbnails: true,\n\n  /**\n   * In MB. When the filename exceeds this limit, the thumbnail will not be generated.\n   */\n  maxThumbnailFilesize: 10,\n\n  /**\n   * If `null`, the ratio of the image will be used to calculate it.\n   */\n  thumbnailWidth: 120,\n\n  /**\n   * The same as `thumbnailWidth`. If both are null, images will not be resized.\n   */\n  thumbnailHeight: 120,\n\n  /**\n   * How the images should be scaled down in case both, `thumbnailWidth` and `thumbnailHeight` are provided.\n   * Can be either `contain` or `crop`.\n   */\n  thumbnailMethod: \"crop\",\n\n  /**\n   * If set, images will be resized to these dimensions before being **uploaded**.\n   * If only one, `resizeWidth` **or** `resizeHeight` is provided, the original aspect\n   * ratio of the file will be preserved.\n   *\n   * The `options.transformFile` function uses these options, so if the `transformFile` function\n   * is overridden, these options don't do anything.\n   */\n  resizeWidth: null,\n\n  /**\n   * See `resizeWidth`.\n   */\n  resizeHeight: null,\n\n  /**\n   * The mime type of the resized image (before it gets uploaded to the server).\n   * If `null` the original mime type will be used. To force jpeg, for example, use `image/jpeg`.\n   * See `resizeWidth` for more information.\n   */\n  resizeMimeType: null,\n\n  /**\n   * The quality of the resized images. See `resizeWidth`.\n   */\n  resizeQuality: 0.8,\n\n  /**\n   * How the images should be scaled down in case both, `resizeWidth` and `resizeHeight` are provided.\n   * Can be either `contain` or `crop`.\n   */\n  resizeMethod: \"contain\",\n\n  /**\n   * The base that is used to calculate the **displayed** filesize. You can\n   * change this to 1024 if you would rather display kibibytes, mebibytes,\n   * etc... 1024 is technically incorrect, because `1024 bytes` are `1 kibibyte`\n   * not `1 kilobyte`. You can change this to `1024` if you don't care about\n   * validity.\n   */\n  filesizeBase: 1000,\n\n  /**\n   * If not `null` defines how many files this Dropzone handles. If it exceeds,\n   * the event `maxfilesexceeded` will be called. The dropzone element gets the\n   * class `dz-max-files-reached` accordingly so you can provide visual\n   * feedback.\n   */\n  maxFiles: null,\n\n  /**\n   * An optional object to send additional headers to the server. Eg:\n   * `{ \"My-Awesome-Header\": \"header value\" }`\n   */\n  headers: null,\n\n  /**\n   * If `true`, the dropzone element itself will be clickable, if `false`\n   * nothing will be clickable.\n   *\n   * You can also pass an HTML element, a CSS selector (for multiple elements)\n   * or an array of those. In that case, all of those elements will trigger an\n   * upload when clicked.\n   */\n  clickable: true,\n\n  /**\n   * Whether hidden files in directories should be ignored.\n   */\n  ignoreHiddenFiles: true,\n\n  /**\n   * The default implementation of `accept` checks the file's mime type or\n   * extension against this list. This is a comma separated list of mime\n   * types or file extensions.\n   *\n   * Eg.: `image/*,application/pdf,.psd`\n   *\n   * If the Dropzone is `clickable` this option will also be used as\n   * [`accept`](https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept)\n   * parameter on the hidden file input as well.\n   */\n  acceptedFiles: null,\n\n  /**\n   * **Deprecated!**\n   * Use acceptedFiles instead.\n   */\n  acceptedMimeTypes: null,\n\n  /**\n   * If false, files will be added to the queue but the queue will not be\n   * processed automatically.\n   * This can be useful if you need some additional user input before sending\n   * files (or if you want want all files sent at once).\n   * If you're ready to send the file simply call `myDropzone.processQueue()`.\n   *\n   * See the [enqueuing file uploads](#enqueuing-file-uploads) documentation\n   * section for more information.\n   */\n  autoProcessQueue: true,\n\n  /**\n   * If false, files added to the dropzone will not be queued by default.\n   * You'll have to call `enqueueFile(file)` manually.\n   */\n  autoQueue: true,\n\n  /**\n   * If `true`, this will add a link to every file preview to remove or cancel (if\n   * already uploading) the file. The `dictCancelUpload`, `dictCancelUploadConfirmation`\n   * and `dictRemoveFile` options are used for the wording.\n   */\n  addRemoveLinks: false,\n\n  /**\n   * Defines where to display the file previews \u2013 if `null` the\n   * Dropzone element itself is used. Can be a plain `HTMLElement` or a CSS\n   * selector. The element should have the `dropzone-previews` class so\n   * the previews are displayed properly.\n   */\n  previewsContainer: null,\n\n  /**\n   * Set this to `true` if you don't want previews to be shown.\n   */\n  disablePreviews: false,\n\n  /**\n   * This is the element the hidden input field (which is used when clicking on the\n   * dropzone to trigger file selection) will be appended to. This might\n   * be important in case you use frameworks to switch the content of your page.\n   *\n   * Can be a selector string, or an element directly.\n   */\n  hiddenInputContainer: \"body\",\n\n  /**\n   * If null, no capture type will be specified\n   * If camera, mobile devices will skip the file selection and choose camera\n   * If microphone, mobile devices will skip the file selection and choose the microphone\n   * If camcorder, mobile devices will skip the file selection and choose the camera in video mode\n   * On apple devices multiple must be set to false.  AcceptedFiles may need to\n   * be set to an appropriate mime type (e.g. \"image/*\", \"audio/*\", or \"video/*\").\n   */\n  capture: null,\n\n  /**\n   * **Deprecated**. Use `renameFile` instead.\n   */\n  renameFilename: null,\n\n  /**\n   * A function that is invoked before the file is uploaded to the server and renames the file.\n   * This function gets the `File` as argument and can use the `file.name`. The actual name of the\n   * file that gets used during the upload can be accessed through `file.upload.filename`.\n   */\n  renameFile: null,\n\n  /**\n   * If `true` the fallback will be forced. This is very useful to test your server\n   * implementations first and make sure that everything works as\n   * expected without dropzone if you experience problems, and to test\n   * how your fallbacks will look.\n   */\n  forceFallback: false,\n\n  /**\n   * The text used before any files are dropped.\n   */\n  dictDefaultMessage: \"Drop files here to upload\",\n\n  /**\n   * The text that replaces the default message text it the browser is not supported.\n   */\n  dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\n\n  /**\n   * The text that will be added before the fallback form.\n   * If you provide a  fallback element yourself, or if this option is `null` this will\n   * be ignored.\n   */\n  dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\n\n  /**\n   * If the filesize is too big.\n   * `{{filesize}}` and `{{maxFilesize}}` will be replaced with the respective configuration values.\n   */\n  dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\n\n  /**\n   * If the file doesn't match the file type.\n   */\n  dictInvalidFileType: \"You can't upload files of this type.\",\n\n  /**\n   * If the server response was invalid.\n   * `{{statusCode}}` will be replaced with the servers status code.\n   */\n  dictResponseError: \"Server responded with {{statusCode}} code.\",\n\n  /**\n   * If `addRemoveLinks` is true, the text to be used for the cancel upload link.\n   */\n  dictCancelUpload: \"Cancel upload\",\n\n  /**\n   * The text that is displayed if an upload was manually canceled\n   */\n  dictUploadCanceled: \"Upload canceled.\",\n\n  /**\n   * If `addRemoveLinks` is true, the text to be used for confirmation when cancelling upload.\n   */\n  dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\n\n  /**\n   * If `addRemoveLinks` is true, the text to be used to remove a file.\n   */\n  dictRemoveFile: \"Remove file\",\n\n  /**\n   * If this is not null, then the user will be prompted before removing a file.\n   */\n  dictRemoveFileConfirmation: null,\n\n  /**\n   * Displayed if `maxFiles` is st and exceeded.\n   * The string `{{maxFiles}}` will be replaced by the configuration value.\n   */\n  dictMaxFilesExceeded: \"You can not upload any more files.\",\n\n  /**\n   * Allows you to translate the different units. Starting with `tb` for terabytes and going down to\n   * `b` for bytes.\n   */\n  dictFileSizeUnits: {\n    tb: \"TB\",\n    gb: \"GB\",\n    mb: \"MB\",\n    kb: \"KB\",\n    b: \"b\"\n  },\n\n  /**\n   * Called when dropzone initialized\n   * You can add event listeners here\n   */\n  init: function init() {},\n\n  /**\n   * Can be an **object** of additional parameters to transfer to the server, **or** a `Function`\n   * that gets invoked with the `files`, `xhr` and, if it's a chunked upload, `chunk` arguments. In case\n   * of a function, this needs to return a map.\n   *\n   * The default implementation does nothing for normal uploads, but adds relevant information for\n   * chunked uploads.\n   *\n   * This is the same as adding hidden input fields in the form element.\n   */\n  params: function params(files, xhr, chunk) {\n    if (chunk) {\n      return {\n        dzuuid: chunk.file.upload.uuid,\n        dzchunkindex: chunk.index,\n        dztotalfilesize: chunk.file.size,\n        dzchunksize: this.options.chunkSize,\n        dztotalchunkcount: chunk.file.upload.totalChunkCount,\n        dzchunkbyteoffset: chunk.index * this.options.chunkSize\n      };\n    }\n  },\n\n  /**\n   * A function that gets a [file](https://developer.mozilla.org/en-US/docs/DOM/File)\n   * and a `done` function as parameters.\n   *\n   * If the done function is invoked without arguments, the file is \"accepted\" and will\n   * be processed. If you pass an error message, the file is rejected, and the error\n   * message will be displayed.\n   * This function will not be called if the file is too big or doesn't match the mime types.\n   */\n  accept: function accept(file, done) {\n    return done();\n  },\n\n  /**\n   * The callback that will be invoked when all chunks have been uploaded for a file.\n   * It gets the file for which the chunks have been uploaded as the first parameter,\n   * and the `done` function as second. `done()` needs to be invoked when everything\n   * needed to finish the upload process is done.\n   */\n  chunksUploaded: function chunksUploaded(file, done) {\n    done();\n  },\n\n  /**\n   * Gets called when the browser is not supported.\n   * The default implementation shows the fallback input field and adds\n   * a text.\n   */\n  fallback: function fallback() {\n    // This code should pass in IE7... :(\n    var messageElement;\n    this.element.className = \"\".concat(this.element.className, \" dz-browser-not-supported\");\n\n    var _iterator = options_createForOfIteratorHelper(this.element.getElementsByTagName(\"div\"), true),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var child = _step.value;\n\n        if (/(^| )dz-message($| )/.test(child.className)) {\n          messageElement = child;\n          child.className = \"dz-message\"; // Removes the 'dz-default' class\n\n          break;\n        }\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n\n    if (!messageElement) {\n      messageElement = Dropzone.createElement('<div class=\"dz-message\"><span></span></div>');\n      this.element.appendChild(messageElement);\n    }\n\n    var span = messageElement.getElementsByTagName(\"span\")[0];\n\n    if (span) {\n      if (span.textContent != null) {\n        span.textContent = this.options.dictFallbackMessage;\n      } else if (span.innerText != null) {\n        span.innerText = this.options.dictFallbackMessage;\n      }\n    }\n\n    return this.element.appendChild(this.getFallbackForm());\n  },\n\n  /**\n   * Gets called to calculate the thumbnail dimensions.\n   *\n   * It gets `file`, `width` and `height` (both may be `null`) as parameters and must return an object containing:\n   *\n   *  - `srcWidth` & `srcHeight` (required)\n   *  - `trgWidth` & `trgHeight` (required)\n   *  - `srcX` & `srcY` (optional, default `0`)\n   *  - `trgX` & `trgY` (optional, default `0`)\n   *\n   * Those values are going to be used by `ctx.drawImage()`.\n   */\n  resize: function resize(file, width, height, resizeMethod) {\n    var info = {\n      srcX: 0,\n      srcY: 0,\n      srcWidth: file.width,\n      srcHeight: file.height\n    };\n    var srcRatio = file.width / file.height; // Automatically calculate dimensions if not specified\n\n    if (width == null && height == null) {\n      width = info.srcWidth;\n      height = info.srcHeight;\n    } else if (width == null) {\n      width = height * srcRatio;\n    } else if (height == null) {\n      height = width / srcRatio;\n    } // Make sure images aren't upscaled\n\n\n    width = Math.min(width, info.srcWidth);\n    height = Math.min(height, info.srcHeight);\n    var trgRatio = width / height;\n\n    if (info.srcWidth > width || info.srcHeight > height) {\n      // Image is bigger and needs rescaling\n      if (resizeMethod === \"crop\") {\n        if (srcRatio > trgRatio) {\n          info.srcHeight = file.height;\n          info.srcWidth = info.srcHeight * trgRatio;\n        } else {\n          info.srcWidth = file.width;\n          info.srcHeight = info.srcWidth / trgRatio;\n        }\n      } else if (resizeMethod === \"contain\") {\n        // Method 'contain'\n        if (srcRatio > trgRatio) {\n          height = width / srcRatio;\n        } else {\n          width = height * srcRatio;\n        }\n      } else {\n        throw new Error(\"Unknown resizeMethod '\".concat(resizeMethod, \"'\"));\n      }\n    }\n\n    info.srcX = (file.width - info.srcWidth) / 2;\n    info.srcY = (file.height - info.srcHeight) / 2;\n    info.trgWidth = width;\n    info.trgHeight = height;\n    return info;\n  },\n\n  /**\n   * Can be used to transform the file (for example, resize an image if necessary).\n   *\n   * The default implementation uses `resizeWidth` and `resizeHeight` (if provided) and resizes\n   * images according to those dimensions.\n   *\n   * Gets the `file` as the first parameter, and a `done()` function as the second, that needs\n   * to be invoked with the file when the transformation is done.\n   */\n  transformFile: function transformFile(file, done) {\n    if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) {\n      return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done);\n    } else {\n      return done(file);\n    }\n  },\n\n  /**\n   * A string that contains the template used for each dropped\n   * file. Change it to fulfill your needs but make sure to properly\n   * provide all elements.\n   *\n   * If you want to use an actual HTML element instead of providing a String\n   * as a config option, you could create a div with the id `tpl`,\n   * put the template inside it and provide the element like this:\n   *\n   *     document\n   *       .querySelector('#tpl')\n   *       .innerHTML\n   *\n   */\n  previewTemplate: preview_template,\n\n  /*\n   Those functions register themselves to the events on init and handle all\n   the user interface specific stuff. Overwriting them won't break the upload\n   but can break the way it's displayed.\n   You can overwrite them if you don't like the default behavior. If you just\n   want to add an additional event handler, register it on the dropzone object\n   and don't overwrite those options.\n   */\n  // Those are self explanatory and simply concern the DragnDrop.\n  drop: function drop(e) {\n    return this.element.classList.remove(\"dz-drag-hover\");\n  },\n  dragstart: function dragstart(e) {},\n  dragend: function dragend(e) {\n    return this.element.classList.remove(\"dz-drag-hover\");\n  },\n  dragenter: function dragenter(e) {\n    return this.element.classList.add(\"dz-drag-hover\");\n  },\n  dragover: function dragover(e) {\n    return this.element.classList.add(\"dz-drag-hover\");\n  },\n  dragleave: function dragleave(e) {\n    return this.element.classList.remove(\"dz-drag-hover\");\n  },\n  paste: function paste(e) {},\n  // Called whenever there are no files left in the dropzone anymore, and the\n  // dropzone should be displayed as if in the initial state.\n  reset: function reset() {\n    return this.element.classList.remove(\"dz-started\");\n  },\n  // Called when a file is added to the queue\n  // Receives `file`\n  addedfile: function addedfile(file) {\n    var _this = this;\n\n    if (this.element === this.previewsContainer) {\n      this.element.classList.add(\"dz-started\");\n    }\n\n    if (this.previewsContainer && !this.options.disablePreviews) {\n      file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\n      file.previewTemplate = file.previewElement; // Backwards compatibility\n\n      this.previewsContainer.appendChild(file.previewElement);\n\n      var _iterator2 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-name]\"), true),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var node = _step2.value;\n          node.textContent = file.name;\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      var _iterator3 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-size]\"), true),\n          _step3;\n\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          node = _step3.value;\n          node.innerHTML = this.filesize(file.size);\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n\n      if (this.options.addRemoveLinks) {\n        file._removeLink = Dropzone.createElement(\"<a class=\\\"dz-remove\\\" href=\\\"javascript:undefined;\\\" data-dz-remove>\".concat(this.options.dictRemoveFile, \"</a>\"));\n        file.previewElement.appendChild(file._removeLink);\n      }\n\n      var removeFileEvent = function removeFileEvent(e) {\n        e.preventDefault();\n        e.stopPropagation();\n\n        if (file.status === Dropzone.UPLOADING) {\n          return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function () {\n            return _this.removeFile(file);\n          });\n        } else {\n          if (_this.options.dictRemoveFileConfirmation) {\n            return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function () {\n              return _this.removeFile(file);\n            });\n          } else {\n            return _this.removeFile(file);\n          }\n        }\n      };\n\n      var _iterator4 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-remove]\"), true),\n          _step4;\n\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var removeLink = _step4.value;\n          removeLink.addEventListener(\"click\", removeFileEvent);\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n    }\n  },\n  // Called whenever a file is removed.\n  removedfile: function removedfile(file) {\n    if (file.previewElement != null && file.previewElement.parentNode != null) {\n      file.previewElement.parentNode.removeChild(file.previewElement);\n    }\n\n    return this._updateMaxFilesReachedClass();\n  },\n  // Called when a thumbnail has been generated\n  // Receives `file` and `dataUrl`\n  thumbnail: function thumbnail(file, dataUrl) {\n    if (file.previewElement) {\n      file.previewElement.classList.remove(\"dz-file-preview\");\n\n      var _iterator5 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\"), true),\n          _step5;\n\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var thumbnailElement = _step5.value;\n          thumbnailElement.alt = file.name;\n          thumbnailElement.src = dataUrl;\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n\n      return setTimeout(function () {\n        return file.previewElement.classList.add(\"dz-image-preview\");\n      }, 1);\n    }\n  },\n  // Called whenever an error occurs\n  // Receives `file` and `message`\n  error: function error(file, message) {\n    if (file.previewElement) {\n      file.previewElement.classList.add(\"dz-error\");\n\n      if (typeof message !== \"string\" && message.error) {\n        message = message.error;\n      }\n\n      var _iterator6 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-errormessage]\"), true),\n          _step6;\n\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var node = _step6.value;\n          node.textContent = message;\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n    }\n  },\n  errormultiple: function errormultiple() {},\n  // Called when a file gets processed. Since there is a cue, not all added\n  // files are processed immediately.\n  // Receives `file`\n  processing: function processing(file) {\n    if (file.previewElement) {\n      file.previewElement.classList.add(\"dz-processing\");\n\n      if (file._removeLink) {\n        return file._removeLink.innerHTML = this.options.dictCancelUpload;\n      }\n    }\n  },\n  processingmultiple: function processingmultiple() {},\n  // Called whenever the upload progress gets updated.\n  // Receives `file`, `progress` (percentage 0-100) and `bytesSent`.\n  // To get the total number of bytes of the file, use `file.size`\n  uploadprogress: function uploadprogress(file, progress, bytesSent) {\n    if (file.previewElement) {\n      var _iterator7 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\"), true),\n          _step7;\n\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var node = _step7.value;\n          node.nodeName === \"PROGRESS\" ? node.value = progress : node.style.width = \"\".concat(progress, \"%\");\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n    }\n  },\n  // Called whenever the total upload progress gets updated.\n  // Called with totalUploadProgress (0-100), totalBytes and totalBytesSent\n  totaluploadprogress: function totaluploadprogress() {},\n  // Called just before the file is sent. Gets the `xhr` object as second\n  // parameter, so you can modify it (for example to add a CSRF token) and a\n  // `formData` object to add additional information.\n  sending: function sending() {},\n  sendingmultiple: function sendingmultiple() {},\n  // When the complete upload is finished and successful\n  // Receives `file`\n  success: function success(file) {\n    if (file.previewElement) {\n      return file.previewElement.classList.add(\"dz-success\");\n    }\n  },\n  successmultiple: function successmultiple() {},\n  // When the upload is canceled.\n  canceled: function canceled(file) {\n    return this.emit(\"error\", file, this.options.dictUploadCanceled);\n  },\n  canceledmultiple: function canceledmultiple() {},\n  // When the upload is finished, either with success or an error.\n  // Receives `file`\n  complete: function complete(file) {\n    if (file._removeLink) {\n      file._removeLink.innerHTML = this.options.dictRemoveFile;\n    }\n\n    if (file.previewElement) {\n      return file.previewElement.classList.add(\"dz-complete\");\n    }\n  },\n  completemultiple: function completemultiple() {},\n  maxfilesexceeded: function maxfilesexceeded() {},\n  maxfilesreached: function maxfilesreached() {},\n  queuecomplete: function queuecomplete() {},\n  addedfiles: function addedfiles() {}\n};\n/* harmony default export */ var src_options = (defaultOptions);\n;// CONCATENATED MODULE: ./src/dropzone.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction dropzone_createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = dropzone_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction dropzone_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return dropzone_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return dropzone_arrayLikeToArray(o, minLen); }\n\nfunction dropzone_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction dropzone_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction dropzone_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction dropzone_createClass(Constructor, protoProps, staticProps) { if (protoProps) dropzone_defineProperties(Constructor.prototype, protoProps); if (staticProps) dropzone_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\nvar Dropzone = /*#__PURE__*/function (_Emitter) {\n  _inherits(Dropzone, _Emitter);\n\n  var _super = _createSuper(Dropzone);\n\n  function Dropzone(el, options) {\n    var _this;\n\n    dropzone_classCallCheck(this, Dropzone);\n\n    _this = _super.call(this);\n    var fallback, left;\n    _this.element = el; // For backwards compatibility since the version was in the prototype previously\n\n    _this.version = Dropzone.version;\n    _this.clickableElements = [];\n    _this.listeners = [];\n    _this.files = []; // All files\n\n    if (typeof _this.element === \"string\") {\n      _this.element = document.querySelector(_this.element);\n    } // Not checking if instance of HTMLElement or Element since IE9 is extremely weird.\n\n\n    if (!_this.element || _this.element.nodeType == null) {\n      throw new Error(\"Invalid dropzone element.\");\n    }\n\n    if (_this.element.dropzone) {\n      throw new Error(\"Dropzone already attached.\");\n    } // Now add this dropzone to the instances.\n\n\n    Dropzone.instances.push(_assertThisInitialized(_this)); // Put the dropzone inside the element itself.\n\n    _this.element.dropzone = _assertThisInitialized(_this);\n    var elementOptions = (left = Dropzone.optionsForElement(_this.element)) != null ? left : {};\n    _this.options = Dropzone.extend({}, src_options, elementOptions, options != null ? options : {});\n    _this.options.previewTemplate = _this.options.previewTemplate.replace(/\\n*/g, \"\"); // If the browser failed, just call the fallback and leave\n\n    if (_this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n      return _possibleConstructorReturn(_this, _this.options.fallback.call(_assertThisInitialized(_this)));\n    } // @options.url = @element.getAttribute \"action\" unless @options.url?\n\n\n    if (_this.options.url == null) {\n      _this.options.url = _this.element.getAttribute(\"action\");\n    }\n\n    if (!_this.options.url) {\n      throw new Error(\"No URL provided.\");\n    }\n\n    if (_this.options.acceptedFiles && _this.options.acceptedMimeTypes) {\n      throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\n    }\n\n    if (_this.options.uploadMultiple && _this.options.chunking) {\n      throw new Error(\"You cannot set both: uploadMultiple and chunking.\");\n    } // Backwards compatibility\n\n\n    if (_this.options.acceptedMimeTypes) {\n      _this.options.acceptedFiles = _this.options.acceptedMimeTypes;\n      delete _this.options.acceptedMimeTypes;\n    } // Backwards compatibility\n\n\n    if (_this.options.renameFilename != null) {\n      _this.options.renameFile = function (file) {\n        return _this.options.renameFilename.call(_assertThisInitialized(_this), file.name, file);\n      };\n    }\n\n    if (typeof _this.options.method === \"string\") {\n      _this.options.method = _this.options.method.toUpperCase();\n    }\n\n    if ((fallback = _this.getExistingFallback()) && fallback.parentNode) {\n      // Remove the fallback\n      fallback.parentNode.removeChild(fallback);\n    } // Display previews in the previewsContainer element or the Dropzone element unless explicitly set to false\n\n\n    if (_this.options.previewsContainer !== false) {\n      if (_this.options.previewsContainer) {\n        _this.previewsContainer = Dropzone.getElement(_this.options.previewsContainer, \"previewsContainer\");\n      } else {\n        _this.previewsContainer = _this.element;\n      }\n    }\n\n    if (_this.options.clickable) {\n      if (_this.options.clickable === true) {\n        _this.clickableElements = [_this.element];\n      } else {\n        _this.clickableElements = Dropzone.getElements(_this.options.clickable, \"clickable\");\n      }\n    }\n\n    _this.init();\n\n    return _this;\n  } // Returns all files that have been accepted\n\n\n  dropzone_createClass(Dropzone, [{\n    key: \"getAcceptedFiles\",\n    value: function getAcceptedFiles() {\n      return this.files.filter(function (file) {\n        return file.accepted;\n      }).map(function (file) {\n        return file;\n      });\n    } // Returns all files that have been rejected\n    // Not sure when that's going to be useful, but added for completeness.\n\n  }, {\n    key: \"getRejectedFiles\",\n    value: function getRejectedFiles() {\n      return this.files.filter(function (file) {\n        return !file.accepted;\n      }).map(function (file) {\n        return file;\n      });\n    }\n  }, {\n    key: \"getFilesWithStatus\",\n    value: function getFilesWithStatus(status) {\n      return this.files.filter(function (file) {\n        return file.status === status;\n      }).map(function (file) {\n        return file;\n      });\n    } // Returns all files that are in the queue\n\n  }, {\n    key: \"getQueuedFiles\",\n    value: function getQueuedFiles() {\n      return this.getFilesWithStatus(Dropzone.QUEUED);\n    }\n  }, {\n    key: \"getUploadingFiles\",\n    value: function getUploadingFiles() {\n      return this.getFilesWithStatus(Dropzone.UPLOADING);\n    }\n  }, {\n    key: \"getAddedFiles\",\n    value: function getAddedFiles() {\n      return this.getFilesWithStatus(Dropzone.ADDED);\n    } // Files that are either queued or uploading\n\n  }, {\n    key: \"getActiveFiles\",\n    value: function getActiveFiles() {\n      return this.files.filter(function (file) {\n        return file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED;\n      }).map(function (file) {\n        return file;\n      });\n    } // The function that gets called when Dropzone is initialized. You\n    // can (and should) setup event listeners inside this function.\n\n  }, {\n    key: \"init\",\n    value: function init() {\n      var _this2 = this;\n\n      // In case it isn't set already\n      if (this.element.tagName === \"form\") {\n        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n      }\n\n      if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\n        this.element.appendChild(Dropzone.createElement(\"<div class=\\\"dz-default dz-message\\\"><button class=\\\"dz-button\\\" type=\\\"button\\\">\".concat(this.options.dictDefaultMessage, \"</button></div>\")));\n      }\n\n      if (this.clickableElements.length) {\n        var setupHiddenFileInput = function setupHiddenFileInput() {\n          if (_this2.hiddenFileInput) {\n            _this2.hiddenFileInput.parentNode.removeChild(_this2.hiddenFileInput);\n          }\n\n          _this2.hiddenFileInput = document.createElement(\"input\");\n\n          _this2.hiddenFileInput.setAttribute(\"type\", \"file\");\n\n          if (_this2.options.maxFiles === null || _this2.options.maxFiles > 1) {\n            _this2.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\n          }\n\n          _this2.hiddenFileInput.className = \"dz-hidden-input\";\n\n          if (_this2.options.acceptedFiles !== null) {\n            _this2.hiddenFileInput.setAttribute(\"accept\", _this2.options.acceptedFiles);\n          }\n\n          if (_this2.options.capture !== null) {\n            _this2.hiddenFileInput.setAttribute(\"capture\", _this2.options.capture);\n          } // Making sure that no one can \"tab\" into this field.\n\n\n          _this2.hiddenFileInput.setAttribute(\"tabindex\", \"-1\"); // Not setting `display=\"none\"` because some browsers don't accept clicks\n          // on elements that aren't displayed.\n\n\n          _this2.hiddenFileInput.style.visibility = \"hidden\";\n          _this2.hiddenFileInput.style.position = \"absolute\";\n          _this2.hiddenFileInput.style.top = \"0\";\n          _this2.hiddenFileInput.style.left = \"0\";\n          _this2.hiddenFileInput.style.height = \"0\";\n          _this2.hiddenFileInput.style.width = \"0\";\n          Dropzone.getElement(_this2.options.hiddenInputContainer, \"hiddenInputContainer\").appendChild(_this2.hiddenFileInput);\n\n          _this2.hiddenFileInput.addEventListener(\"change\", function () {\n            var files = _this2.hiddenFileInput.files;\n\n            if (files.length) {\n              var _iterator = dropzone_createForOfIteratorHelper(files, true),\n                  _step;\n\n              try {\n                for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                  var file = _step.value;\n\n                  _this2.addFile(file);\n                }\n              } catch (err) {\n                _iterator.e(err);\n              } finally {\n                _iterator.f();\n              }\n            }\n\n            _this2.emit(\"addedfiles\", files);\n\n            setupHiddenFileInput();\n          });\n        };\n\n        setupHiddenFileInput();\n      }\n\n      this.URL = window.URL !== null ? window.URL : window.webkitURL; // Setup all event listeners on the Dropzone object itself.\n      // They're not in @setupEventListeners() because they shouldn't be removed\n      // again when the dropzone gets disabled.\n\n      var _iterator2 = dropzone_createForOfIteratorHelper(this.events, true),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var eventName = _step2.value;\n          this.on(eventName, this.options[eventName]);\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      this.on(\"uploadprogress\", function () {\n        return _this2.updateTotalUploadProgress();\n      });\n      this.on(\"removedfile\", function () {\n        return _this2.updateTotalUploadProgress();\n      });\n      this.on(\"canceled\", function (file) {\n        return _this2.emit(\"complete\", file);\n      }); // Emit a `queuecomplete` event if all files finished uploading.\n\n      this.on(\"complete\", function (file) {\n        if (_this2.getAddedFiles().length === 0 && _this2.getUploadingFiles().length === 0 && _this2.getQueuedFiles().length === 0) {\n          // This needs to be deferred so that `queuecomplete` really triggers after `complete`\n          return setTimeout(function () {\n            return _this2.emit(\"queuecomplete\");\n          }, 0);\n        }\n      });\n\n      var containsFiles = function containsFiles(e) {\n        if (e.dataTransfer.types) {\n          // Because e.dataTransfer.types is an Object in\n          // IE, we need to iterate like this instead of\n          // using e.dataTransfer.types.some()\n          for (var i = 0; i < e.dataTransfer.types.length; i++) {\n            if (e.dataTransfer.types[i] === \"Files\") return true;\n          }\n        }\n\n        return false;\n      };\n\n      var noPropagation = function noPropagation(e) {\n        // If there are no files, we don't want to stop\n        // propagation so we don't interfere with other\n        // drag and drop behaviour.\n        if (!containsFiles(e)) return;\n        e.stopPropagation();\n\n        if (e.preventDefault) {\n          return e.preventDefault();\n        } else {\n          return e.returnValue = false;\n        }\n      }; // Create the listeners\n\n\n      this.listeners = [{\n        element: this.element,\n        events: {\n          dragstart: function dragstart(e) {\n            return _this2.emit(\"dragstart\", e);\n          },\n          dragenter: function dragenter(e) {\n            noPropagation(e);\n            return _this2.emit(\"dragenter\", e);\n          },\n          dragover: function dragover(e) {\n            // Makes it possible to drag files from chrome's download bar\n            // http://stackoverflow.com/questions/19526430/drag-and-drop-file-uploads-from-chrome-downloads-bar\n            // Try is required to prevent bug in Internet Explorer 11 (SCRIPT65535 exception)\n            var efct;\n\n            try {\n              efct = e.dataTransfer.effectAllowed;\n            } catch (error) {}\n\n            e.dataTransfer.dropEffect = \"move\" === efct || \"linkMove\" === efct ? \"move\" : \"copy\";\n            noPropagation(e);\n            return _this2.emit(\"dragover\", e);\n          },\n          dragleave: function dragleave(e) {\n            return _this2.emit(\"dragleave\", e);\n          },\n          drop: function drop(e) {\n            noPropagation(e);\n            return _this2.drop(e);\n          },\n          dragend: function dragend(e) {\n            return _this2.emit(\"dragend\", e);\n          }\n        } // This is disabled right now, because the browsers don't implement it properly.\n        // \"paste\": (e) =>\n        //   noPropagation e\n        //   @paste e\n\n      }];\n      this.clickableElements.forEach(function (clickableElement) {\n        return _this2.listeners.push({\n          element: clickableElement,\n          events: {\n            click: function click(evt) {\n              // Only the actual dropzone or the message element should trigger file selection\n              if (clickableElement !== _this2.element || evt.target === _this2.element || Dropzone.elementInside(evt.target, _this2.element.querySelector(\".dz-message\"))) {\n                _this2.hiddenFileInput.click(); // Forward the click\n\n              }\n\n              return true;\n            }\n          }\n        });\n      });\n      this.enable();\n      return this.options.init.call(this);\n    } // Not fully tested yet\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.disable();\n      this.removeAllFiles(true);\n\n      if (this.hiddenFileInput != null ? this.hiddenFileInput.parentNode : undefined) {\n        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n        this.hiddenFileInput = null;\n      }\n\n      delete this.element.dropzone;\n      return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n    }\n  }, {\n    key: \"updateTotalUploadProgress\",\n    value: function updateTotalUploadProgress() {\n      var totalUploadProgress;\n      var totalBytesSent = 0;\n      var totalBytes = 0;\n      var activeFiles = this.getActiveFiles();\n\n      if (activeFiles.length) {\n        var _iterator3 = dropzone_createForOfIteratorHelper(this.getActiveFiles(), true),\n            _step3;\n\n        try {\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n            var file = _step3.value;\n            totalBytesSent += file.upload.bytesSent;\n            totalBytes += file.upload.total;\n          }\n        } catch (err) {\n          _iterator3.e(err);\n        } finally {\n          _iterator3.f();\n        }\n\n        totalUploadProgress = 100 * totalBytesSent / totalBytes;\n      } else {\n        totalUploadProgress = 100;\n      }\n\n      return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\n    } // @options.paramName can be a function taking one parameter rather than a string.\n    // A parameter name for a file is obtained simply by calling this with an index number.\n\n  }, {\n    key: \"_getParamName\",\n    value: function _getParamName(n) {\n      if (typeof this.options.paramName === \"function\") {\n        return this.options.paramName(n);\n      } else {\n        return \"\".concat(this.options.paramName).concat(this.options.uploadMultiple ? \"[\".concat(n, \"]\") : \"\");\n      }\n    } // If @options.renameFile is a function,\n    // the function will be used to rename the file.name before appending it to the formData\n\n  }, {\n    key: \"_renameFile\",\n    value: function _renameFile(file) {\n      if (typeof this.options.renameFile !== \"function\") {\n        return file.name;\n      }\n\n      return this.options.renameFile(file);\n    } // Returns a form that can be used as fallback if the browser does not support DragnDrop\n    //\n    // If the dropzone is already a form, only the input field and button are returned. Otherwise a complete form element is provided.\n    // This code has to pass in IE7 :(\n\n  }, {\n    key: \"getFallbackForm\",\n    value: function getFallbackForm() {\n      var existingFallback, form;\n\n      if (existingFallback = this.getExistingFallback()) {\n        return existingFallback;\n      }\n\n      var fieldsString = '<div class=\"dz-fallback\">';\n\n      if (this.options.dictFallbackText) {\n        fieldsString += \"<p>\".concat(this.options.dictFallbackText, \"</p>\");\n      }\n\n      fieldsString += \"<input type=\\\"file\\\" name=\\\"\".concat(this._getParamName(0), \"\\\" \").concat(this.options.uploadMultiple ? 'multiple=\"multiple\"' : undefined, \" /><input type=\\\"submit\\\" value=\\\"Upload!\\\"></div>\");\n      var fields = Dropzone.createElement(fieldsString);\n\n      if (this.element.tagName !== \"FORM\") {\n        form = Dropzone.createElement(\"<form action=\\\"\".concat(this.options.url, \"\\\" enctype=\\\"multipart/form-data\\\" method=\\\"\").concat(this.options.method, \"\\\"></form>\"));\n        form.appendChild(fields);\n      } else {\n        // Make sure that the enctype and method attributes are set properly\n        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n        this.element.setAttribute(\"method\", this.options.method);\n      }\n\n      return form != null ? form : fields;\n    } // Returns the fallback elements if they exist already\n    //\n    // This code has to pass in IE7 :(\n\n  }, {\n    key: \"getExistingFallback\",\n    value: function getExistingFallback() {\n      var getFallback = function getFallback(elements) {\n        var _iterator4 = dropzone_createForOfIteratorHelper(elements, true),\n            _step4;\n\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var el = _step4.value;\n\n            if (/(^| )fallback($| )/.test(el.className)) {\n              return el;\n            }\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n      };\n\n      for (var _i = 0, _arr = [\"div\", \"form\"]; _i < _arr.length; _i++) {\n        var tagName = _arr[_i];\n        var fallback;\n\n        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n          return fallback;\n        }\n      }\n    } // Activates all listeners stored in @listeners\n\n  }, {\n    key: \"setupEventListeners\",\n    value: function setupEventListeners() {\n      return this.listeners.map(function (elementListeners) {\n        return function () {\n          var result = [];\n\n          for (var event in elementListeners.events) {\n            var listener = elementListeners.events[event];\n            result.push(elementListeners.element.addEventListener(event, listener, false));\n          }\n\n          return result;\n        }();\n      });\n    } // Deactivates all listeners stored in @listeners\n\n  }, {\n    key: \"removeEventListeners\",\n    value: function removeEventListeners() {\n      return this.listeners.map(function (elementListeners) {\n        return function () {\n          var result = [];\n\n          for (var event in elementListeners.events) {\n            var listener = elementListeners.events[event];\n            result.push(elementListeners.element.removeEventListener(event, listener, false));\n          }\n\n          return result;\n        }();\n      });\n    } // Removes all event listeners and cancels all files in the queue or being processed.\n\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      var _this3 = this;\n\n      this.clickableElements.forEach(function (element) {\n        return element.classList.remove(\"dz-clickable\");\n      });\n      this.removeEventListeners();\n      this.disabled = true;\n      return this.files.map(function (file) {\n        return _this3.cancelUpload(file);\n      });\n    }\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      delete this.disabled;\n      this.clickableElements.forEach(function (element) {\n        return element.classList.add(\"dz-clickable\");\n      });\n      return this.setupEventListeners();\n    } // Returns a nicely formatted filesize\n\n  }, {\n    key: \"filesize\",\n    value: function filesize(size) {\n      var selectedSize = 0;\n      var selectedUnit = \"b\";\n\n      if (size > 0) {\n        var units = [\"tb\", \"gb\", \"mb\", \"kb\", \"b\"];\n\n        for (var i = 0; i < units.length; i++) {\n          var unit = units[i];\n          var cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\n\n          if (size >= cutoff) {\n            selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\n            selectedUnit = unit;\n            break;\n          }\n        }\n\n        selectedSize = Math.round(10 * selectedSize) / 10; // Cutting of digits\n      }\n\n      return \"<strong>\".concat(selectedSize, \"</strong> \").concat(this.options.dictFileSizeUnits[selectedUnit]);\n    } // Adds or removes the `dz-max-files-reached` class from the form.\n\n  }, {\n    key: \"_updateMaxFilesReachedClass\",\n    value: function _updateMaxFilesReachedClass() {\n      if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        if (this.getAcceptedFiles().length === this.options.maxFiles) {\n          this.emit(\"maxfilesreached\", this.files);\n        }\n\n        return this.element.classList.add(\"dz-max-files-reached\");\n      } else {\n        return this.element.classList.remove(\"dz-max-files-reached\");\n      }\n    }\n  }, {\n    key: \"drop\",\n    value: function drop(e) {\n      if (!e.dataTransfer) {\n        return;\n      }\n\n      this.emit(\"drop\", e); // Convert the FileList to an Array\n      // This is necessary for IE11\n\n      var files = [];\n\n      for (var i = 0; i < e.dataTransfer.files.length; i++) {\n        files[i] = e.dataTransfer.files[i];\n      } // Even if it's a folder, files.length will contain the folders.\n\n\n      if (files.length) {\n        var items = e.dataTransfer.items;\n\n        if (items && items.length && items[0].webkitGetAsEntry != null) {\n          // The browser supports dropping of folders, so handle items instead of files\n          this._addFilesFromItems(items);\n        } else {\n          this.handleFiles(files);\n        }\n      }\n\n      this.emit(\"addedfiles\", files);\n    }\n  }, {\n    key: \"paste\",\n    value: function paste(e) {\n      if (__guard__(e != null ? e.clipboardData : undefined, function (x) {\n        return x.items;\n      }) == null) {\n        return;\n      }\n\n      this.emit(\"paste\", e);\n      var items = e.clipboardData.items;\n\n      if (items.length) {\n        return this._addFilesFromItems(items);\n      }\n    }\n  }, {\n    key: \"handleFiles\",\n    value: function handleFiles(files) {\n      var _iterator5 = dropzone_createForOfIteratorHelper(files, true),\n          _step5;\n\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var file = _step5.value;\n          this.addFile(file);\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n    } // When a folder is dropped (or files are pasted), items must be handled\n    // instead of files.\n\n  }, {\n    key: \"_addFilesFromItems\",\n    value: function _addFilesFromItems(items) {\n      var _this4 = this;\n\n      return function () {\n        var result = [];\n\n        var _iterator6 = dropzone_createForOfIteratorHelper(items, true),\n            _step6;\n\n        try {\n          for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n            var item = _step6.value;\n            var entry;\n\n            if (item.webkitGetAsEntry != null && (entry = item.webkitGetAsEntry())) {\n              if (entry.isFile) {\n                result.push(_this4.addFile(item.getAsFile()));\n              } else if (entry.isDirectory) {\n                // Append all files from that directory to files\n                result.push(_this4._addFilesFromDirectory(entry, entry.name));\n              } else {\n                result.push(undefined);\n              }\n            } else if (item.getAsFile != null) {\n              if (item.kind == null || item.kind === \"file\") {\n                result.push(_this4.addFile(item.getAsFile()));\n              } else {\n                result.push(undefined);\n              }\n            } else {\n              result.push(undefined);\n            }\n          }\n        } catch (err) {\n          _iterator6.e(err);\n        } finally {\n          _iterator6.f();\n        }\n\n        return result;\n      }();\n    } // Goes through the directory, and adds each file it finds recursively\n\n  }, {\n    key: \"_addFilesFromDirectory\",\n    value: function _addFilesFromDirectory(directory, path) {\n      var _this5 = this;\n\n      var dirReader = directory.createReader();\n\n      var errorHandler = function errorHandler(error) {\n        return __guardMethod__(console, \"log\", function (o) {\n          return o.log(error);\n        });\n      };\n\n      var readEntries = function readEntries() {\n        return dirReader.readEntries(function (entries) {\n          if (entries.length > 0) {\n            var _iterator7 = dropzone_createForOfIteratorHelper(entries, true),\n                _step7;\n\n            try {\n              for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n                var entry = _step7.value;\n\n                if (entry.isFile) {\n                  entry.file(function (file) {\n                    if (_this5.options.ignoreHiddenFiles && file.name.substring(0, 1) === \".\") {\n                      return;\n                    }\n\n                    file.fullPath = \"\".concat(path, \"/\").concat(file.name);\n                    return _this5.addFile(file);\n                  });\n                } else if (entry.isDirectory) {\n                  _this5._addFilesFromDirectory(entry, \"\".concat(path, \"/\").concat(entry.name));\n                }\n              } // Recursively call readEntries() again, since browser only handle\n              // the first 100 entries.\n              // See: https://developer.mozilla.org/en-US/docs/Web/API/DirectoryReader#readEntries\n\n            } catch (err) {\n              _iterator7.e(err);\n            } finally {\n              _iterator7.f();\n            }\n\n            readEntries();\n          }\n\n          return null;\n        }, errorHandler);\n      };\n\n      return readEntries();\n    } // If `done()` is called without argument the file is accepted\n    // If you call it with an error message, the file is rejected\n    // (This allows for asynchronous validation)\n    //\n    // This function checks the filesize, and if the file.type passes the\n    // `acceptedFiles` check.\n\n  }, {\n    key: \"accept\",\n    value: function accept(file, done) {\n      if (this.options.maxFilesize && file.size > this.options.maxFilesize * 1024 * 1024) {\n        done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\n      } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n        done(this.options.dictInvalidFileType);\n      } else if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\n        this.emit(\"maxfilesexceeded\", file);\n      } else {\n        this.options.accept.call(this, file, done);\n      }\n    }\n  }, {\n    key: \"addFile\",\n    value: function addFile(file) {\n      var _this6 = this;\n\n      file.upload = {\n        uuid: Dropzone.uuidv4(),\n        progress: 0,\n        // Setting the total upload size to file.size for the beginning\n        // It's actual different than the size to be transmitted.\n        total: file.size,\n        bytesSent: 0,\n        filename: this._renameFile(file) // Not setting chunking information here, because the acutal data \u2014 and\n        // thus the chunks \u2014 might change if `options.transformFile` is set\n        // and does something to the data.\n\n      };\n      this.files.push(file);\n      file.status = Dropzone.ADDED;\n      this.emit(\"addedfile\", file);\n\n      this._enqueueThumbnail(file);\n\n      this.accept(file, function (error) {\n        if (error) {\n          file.accepted = false;\n\n          _this6._errorProcessing([file], error); // Will set the file.status\n\n        } else {\n          file.accepted = true;\n\n          if (_this6.options.autoQueue) {\n            _this6.enqueueFile(file);\n          } // Will set .accepted = true\n\n        }\n\n        _this6._updateMaxFilesReachedClass();\n      });\n    } // Wrapper for enqueueFile\n\n  }, {\n    key: \"enqueueFiles\",\n    value: function enqueueFiles(files) {\n      var _iterator8 = dropzone_createForOfIteratorHelper(files, true),\n          _step8;\n\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var file = _step8.value;\n          this.enqueueFile(file);\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n\n      return null;\n    }\n  }, {\n    key: \"enqueueFile\",\n    value: function enqueueFile(file) {\n      var _this7 = this;\n\n      if (file.status === Dropzone.ADDED && file.accepted === true) {\n        file.status = Dropzone.QUEUED;\n\n        if (this.options.autoProcessQueue) {\n          return setTimeout(function () {\n            return _this7.processQueue();\n          }, 0); // Deferring the call\n        }\n      } else {\n        throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\n      }\n    }\n  }, {\n    key: \"_enqueueThumbnail\",\n    value: function _enqueueThumbnail(file) {\n      var _this8 = this;\n\n      if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n        this._thumbnailQueue.push(file);\n\n        return setTimeout(function () {\n          return _this8._processThumbnailQueue();\n        }, 0); // Deferring the call\n      }\n    }\n  }, {\n    key: \"_processThumbnailQueue\",\n    value: function _processThumbnailQueue() {\n      var _this9 = this;\n\n      if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n        return;\n      }\n\n      this._processingThumbnail = true;\n\n      var file = this._thumbnailQueue.shift();\n\n      return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, function (dataUrl) {\n        _this9.emit(\"thumbnail\", file, dataUrl);\n\n        _this9._processingThumbnail = false;\n        return _this9._processThumbnailQueue();\n      });\n    } // Can be called by the user to remove a file\n\n  }, {\n    key: \"removeFile\",\n    value: function removeFile(file) {\n      if (file.status === Dropzone.UPLOADING) {\n        this.cancelUpload(file);\n      }\n\n      this.files = without(this.files, file);\n      this.emit(\"removedfile\", file);\n\n      if (this.files.length === 0) {\n        return this.emit(\"reset\");\n      }\n    } // Removes all files that aren't currently processed from the list\n\n  }, {\n    key: \"removeAllFiles\",\n    value: function removeAllFiles(cancelIfNecessary) {\n      // Create a copy of files since removeFile() changes the @files array.\n      if (cancelIfNecessary == null) {\n        cancelIfNecessary = false;\n      }\n\n      var _iterator9 = dropzone_createForOfIteratorHelper(this.files.slice(), true),\n          _step9;\n\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var file = _step9.value;\n\n          if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n            this.removeFile(file);\n          }\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n\n      return null;\n    } // Resizes an image before it gets sent to the server. This function is the default behavior of\n    // `options.transformFile` if `resizeWidth` or `resizeHeight` are set. The callback is invoked with\n    // the resized blob.\n\n  }, {\n    key: \"resizeImage\",\n    value: function resizeImage(file, width, height, resizeMethod, callback) {\n      var _this10 = this;\n\n      return this.createThumbnail(file, width, height, resizeMethod, true, function (dataUrl, canvas) {\n        if (canvas == null) {\n          // The image has not been resized\n          return callback(file);\n        } else {\n          var resizeMimeType = _this10.options.resizeMimeType;\n\n          if (resizeMimeType == null) {\n            resizeMimeType = file.type;\n          }\n\n          var resizedDataURL = canvas.toDataURL(resizeMimeType, _this10.options.resizeQuality);\n\n          if (resizeMimeType === \"image/jpeg\" || resizeMimeType === \"image/jpg\") {\n            // Now add the original EXIF information\n            resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL);\n          }\n\n          return callback(Dropzone.dataURItoBlob(resizedDataURL));\n        }\n      });\n    }\n  }, {\n    key: \"createThumbnail\",\n    value: function createThumbnail(file, width, height, resizeMethod, fixOrientation, callback) {\n      var _this11 = this;\n\n      var fileReader = new FileReader();\n\n      fileReader.onload = function () {\n        file.dataURL = fileReader.result; // Don't bother creating a thumbnail for SVG images since they're vector\n\n        if (file.type === \"image/svg+xml\") {\n          if (callback != null) {\n            callback(fileReader.result);\n          }\n\n          return;\n        }\n\n        _this11.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback);\n      };\n\n      fileReader.readAsDataURL(file);\n    } // `mockFile` needs to have these attributes:\n    //\n    //     { name: 'name', size: 12345, imageUrl: '' }\n    //\n    // `callback` will be invoked when the image has been downloaded and displayed.\n    // `crossOrigin` will be added to the `img` tag when accessing the file.\n\n  }, {\n    key: \"displayExistingFile\",\n    value: function displayExistingFile(mockFile, imageUrl, callback, crossOrigin) {\n      var _this12 = this;\n\n      var resizeThumbnail = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n      this.emit(\"addedfile\", mockFile);\n      this.emit(\"complete\", mockFile);\n\n      if (!resizeThumbnail) {\n        this.emit(\"thumbnail\", mockFile, imageUrl);\n        if (callback) callback();\n      } else {\n        var onDone = function onDone(thumbnail) {\n          _this12.emit(\"thumbnail\", mockFile, thumbnail);\n\n          if (callback) callback();\n        };\n\n        mockFile.dataURL = imageUrl;\n        this.createThumbnailFromUrl(mockFile, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, this.options.fixOrientation, onDone, crossOrigin);\n      }\n    }\n  }, {\n    key: \"createThumbnailFromUrl\",\n    value: function createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) {\n      var _this13 = this;\n\n      // Not using `new Image` here because of a bug in latest Chrome versions.\n      // See https://github.com/enyo/dropzone/pull/226\n      var img = document.createElement(\"img\");\n\n      if (crossOrigin) {\n        img.crossOrigin = crossOrigin;\n      } // fixOrientation is not needed anymore with browsers handling imageOrientation\n\n\n      fixOrientation = getComputedStyle(document.body)[\"imageOrientation\"] == \"from-image\" ? false : fixOrientation;\n\n      img.onload = function () {\n        var loadExif = function loadExif(callback) {\n          return callback(1);\n        };\n\n        if (typeof EXIF !== \"undefined\" && EXIF !== null && fixOrientation) {\n          loadExif = function loadExif(callback) {\n            return EXIF.getData(img, function () {\n              return callback(EXIF.getTag(this, \"Orientation\"));\n            });\n          };\n        }\n\n        return loadExif(function (orientation) {\n          file.width = img.width;\n          file.height = img.height;\n\n          var resizeInfo = _this13.options.resize.call(_this13, file, width, height, resizeMethod);\n\n          var canvas = document.createElement(\"canvas\");\n          var ctx = canvas.getContext(\"2d\");\n          canvas.width = resizeInfo.trgWidth;\n          canvas.height = resizeInfo.trgHeight;\n\n          if (orientation > 4) {\n            canvas.width = resizeInfo.trgHeight;\n            canvas.height = resizeInfo.trgWidth;\n          }\n\n          switch (orientation) {\n            case 2:\n              // horizontal flip\n              ctx.translate(canvas.width, 0);\n              ctx.scale(-1, 1);\n              break;\n\n            case 3:\n              // 180\u00B0 rotate left\n              ctx.translate(canvas.width, canvas.height);\n              ctx.rotate(Math.PI);\n              break;\n\n            case 4:\n              // vertical flip\n              ctx.translate(0, canvas.height);\n              ctx.scale(1, -1);\n              break;\n\n            case 5:\n              // vertical flip + 90 rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.scale(1, -1);\n              break;\n\n            case 6:\n              // 90\u00B0 rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.translate(0, -canvas.width);\n              break;\n\n            case 7:\n              // horizontal flip + 90 rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.translate(canvas.height, -canvas.width);\n              ctx.scale(-1, 1);\n              break;\n\n            case 8:\n              // 90\u00B0 rotate left\n              ctx.rotate(-0.5 * Math.PI);\n              ctx.translate(-canvas.height, 0);\n              break;\n          } // This is a bugfix for iOS' scaling bug.\n\n\n          drawImageIOSFix(ctx, img, resizeInfo.srcX != null ? resizeInfo.srcX : 0, resizeInfo.srcY != null ? resizeInfo.srcY : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, resizeInfo.trgX != null ? resizeInfo.trgX : 0, resizeInfo.trgY != null ? resizeInfo.trgY : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n          var thumbnail = canvas.toDataURL(\"image/png\");\n\n          if (callback != null) {\n            return callback(thumbnail, canvas);\n          }\n        });\n      };\n\n      if (callback != null) {\n        img.onerror = callback;\n      }\n\n      return img.src = file.dataURL;\n    } // Goes through the queue and processes files if there aren't too many already.\n\n  }, {\n    key: \"processQueue\",\n    value: function processQueue() {\n      var parallelUploads = this.options.parallelUploads;\n      var processingLength = this.getUploadingFiles().length;\n      var i = processingLength; // There are already at least as many files uploading than should be\n\n      if (processingLength >= parallelUploads) {\n        return;\n      }\n\n      var queuedFiles = this.getQueuedFiles();\n\n      if (!(queuedFiles.length > 0)) {\n        return;\n      }\n\n      if (this.options.uploadMultiple) {\n        // The files should be uploaded in one request\n        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n      } else {\n        while (i < parallelUploads) {\n          if (!queuedFiles.length) {\n            return;\n          } // Nothing left to process\n\n\n          this.processFile(queuedFiles.shift());\n          i++;\n        }\n      }\n    } // Wrapper for `processFiles`\n\n  }, {\n    key: \"processFile\",\n    value: function processFile(file) {\n      return this.processFiles([file]);\n    } // Loads the file, then calls finishedLoading()\n\n  }, {\n    key: \"processFiles\",\n    value: function processFiles(files) {\n      var _iterator10 = dropzone_createForOfIteratorHelper(files, true),\n          _step10;\n\n      try {\n        for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n          var file = _step10.value;\n          file.processing = true; // Backwards compatibility\n\n          file.status = Dropzone.UPLOADING;\n          this.emit(\"processing\", file);\n        }\n      } catch (err) {\n        _iterator10.e(err);\n      } finally {\n        _iterator10.f();\n      }\n\n      if (this.options.uploadMultiple) {\n        this.emit(\"processingmultiple\", files);\n      }\n\n      return this.uploadFiles(files);\n    }\n  }, {\n    key: \"_getFilesWithXhr\",\n    value: function _getFilesWithXhr(xhr) {\n      var files;\n      return files = this.files.filter(function (file) {\n        return file.xhr === xhr;\n      }).map(function (file) {\n        return file;\n      });\n    } // Cancels the file upload and sets the status to CANCELED\n    // **if** the file is actually being uploaded.\n    // If it's still in the queue, the file is being removed from it and the status\n    // set to CANCELED.\n\n  }, {\n    key: \"cancelUpload\",\n    value: function cancelUpload(file) {\n      if (file.status === Dropzone.UPLOADING) {\n        var groupedFiles = this._getFilesWithXhr(file.xhr);\n\n        var _iterator11 = dropzone_createForOfIteratorHelper(groupedFiles, true),\n            _step11;\n\n        try {\n          for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n            var groupedFile = _step11.value;\n            groupedFile.status = Dropzone.CANCELED;\n          }\n        } catch (err) {\n          _iterator11.e(err);\n        } finally {\n          _iterator11.f();\n        }\n\n        if (typeof file.xhr !== \"undefined\") {\n          file.xhr.abort();\n        }\n\n        var _iterator12 = dropzone_createForOfIteratorHelper(groupedFiles, true),\n            _step12;\n\n        try {\n          for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n            var _groupedFile = _step12.value;\n            this.emit(\"canceled\", _groupedFile);\n          }\n        } catch (err) {\n          _iterator12.e(err);\n        } finally {\n          _iterator12.f();\n        }\n\n        if (this.options.uploadMultiple) {\n          this.emit(\"canceledmultiple\", groupedFiles);\n        }\n      } else if (file.status === Dropzone.ADDED || file.status === Dropzone.QUEUED) {\n        file.status = Dropzone.CANCELED;\n        this.emit(\"canceled\", file);\n\n        if (this.options.uploadMultiple) {\n          this.emit(\"canceledmultiple\", [file]);\n        }\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    }\n  }, {\n    key: \"resolveOption\",\n    value: function resolveOption(option) {\n      if (typeof option === \"function\") {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        return option.apply(this, args);\n      }\n\n      return option;\n    }\n  }, {\n    key: \"uploadFile\",\n    value: function uploadFile(file) {\n      return this.uploadFiles([file]);\n    }\n  }, {\n    key: \"uploadFiles\",\n    value: function uploadFiles(files) {\n      var _this14 = this;\n\n      this._transformFiles(files, function (transformedFiles) {\n        if (_this14.options.chunking) {\n          // Chunking is not allowed to be used with `uploadMultiple` so we know\n          // that there is only __one__file.\n          var transformedFile = transformedFiles[0];\n          files[0].upload.chunked = _this14.options.chunking && (_this14.options.forceChunking || transformedFile.size > _this14.options.chunkSize);\n          files[0].upload.totalChunkCount = Math.ceil(transformedFile.size / _this14.options.chunkSize);\n        }\n\n        if (files[0].upload.chunked) {\n          // This file should be sent in chunks!\n          // If the chunking option is set, we **know** that there can only be **one** file, since\n          // uploadMultiple is not allowed with this option.\n          var file = files[0];\n          var _transformedFile = transformedFiles[0];\n          var startedChunkCount = 0;\n          file.upload.chunks = [];\n\n          var handleNextChunk = function handleNextChunk() {\n            var chunkIndex = 0; // Find the next item in file.upload.chunks that is not defined yet.\n\n            while (file.upload.chunks[chunkIndex] !== undefined) {\n              chunkIndex++;\n            } // This means, that all chunks have already been started.\n\n\n            if (chunkIndex >= file.upload.totalChunkCount) return;\n            startedChunkCount++;\n            var start = chunkIndex * _this14.options.chunkSize;\n            var end = Math.min(start + _this14.options.chunkSize, _transformedFile.size);\n            var dataBlock = {\n              name: _this14._getParamName(0),\n              data: _transformedFile.webkitSlice ? _transformedFile.webkitSlice(start, end) : _transformedFile.slice(start, end),\n              filename: file.upload.filename,\n              chunkIndex: chunkIndex\n            };\n            file.upload.chunks[chunkIndex] = {\n              file: file,\n              index: chunkIndex,\n              dataBlock: dataBlock,\n              // In case we want to retry.\n              status: Dropzone.UPLOADING,\n              progress: 0,\n              retries: 0 // The number of times this block has been retried.\n\n            };\n\n            _this14._uploadData(files, [dataBlock]);\n          };\n\n          file.upload.finishedChunkUpload = function (chunk, response) {\n            var allFinished = true;\n            chunk.status = Dropzone.SUCCESS; // Clear the data from the chunk\n\n            chunk.dataBlock = null; // Leaving this reference to xhr intact here will cause memory leaks in some browsers\n\n            chunk.xhr = null;\n\n            for (var i = 0; i < file.upload.totalChunkCount; i++) {\n              if (file.upload.chunks[i] === undefined) {\n                return handleNextChunk();\n              }\n\n              if (file.upload.chunks[i].status !== Dropzone.SUCCESS) {\n                allFinished = false;\n              }\n            }\n\n            if (allFinished) {\n              _this14.options.chunksUploaded(file, function () {\n                _this14._finished(files, response, null);\n              });\n            }\n          };\n\n          if (_this14.options.parallelChunkUploads) {\n            for (var i = 0; i < file.upload.totalChunkCount; i++) {\n              handleNextChunk();\n            }\n          } else {\n            handleNextChunk();\n          }\n        } else {\n          var dataBlocks = [];\n\n          for (var _i2 = 0; _i2 < files.length; _i2++) {\n            dataBlocks[_i2] = {\n              name: _this14._getParamName(_i2),\n              data: transformedFiles[_i2],\n              filename: files[_i2].upload.filename\n            };\n          }\n\n          _this14._uploadData(files, dataBlocks);\n        }\n      });\n    } /// Returns the right chunk for given file and xhr\n\n  }, {\n    key: \"_getChunk\",\n    value: function _getChunk(file, xhr) {\n      for (var i = 0; i < file.upload.totalChunkCount; i++) {\n        if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].xhr === xhr) {\n          return file.upload.chunks[i];\n        }\n      }\n    } // This function actually uploads the file(s) to the server.\n    // If dataBlocks contains the actual data to upload (meaning, that this could either be transformed\n    // files, or individual chunks for chunked upload).\n\n  }, {\n    key: \"_uploadData\",\n    value: function _uploadData(files, dataBlocks) {\n      var _this15 = this;\n\n      var xhr = new XMLHttpRequest(); // Put the xhr object in the file objects to be able to reference it later.\n\n      var _iterator13 = dropzone_createForOfIteratorHelper(files, true),\n          _step13;\n\n      try {\n        for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n          var file = _step13.value;\n          file.xhr = xhr;\n        }\n      } catch (err) {\n        _iterator13.e(err);\n      } finally {\n        _iterator13.f();\n      }\n\n      if (files[0].upload.chunked) {\n        // Put the xhr object in the right chunk object, so it can be associated later, and found with _getChunk\n        files[0].upload.chunks[dataBlocks[0].chunkIndex].xhr = xhr;\n      }\n\n      var method = this.resolveOption(this.options.method, files);\n      var url = this.resolveOption(this.options.url, files);\n      xhr.open(method, url, true); // Setting the timeout after open because of IE11 issue: https://gitlab.com/meno/dropzone/issues/8\n\n      var timeout = this.resolveOption(this.options.timeout, files);\n      if (timeout) xhr.timeout = this.resolveOption(this.options.timeout, files); // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n\n      xhr.withCredentials = !!this.options.withCredentials;\n\n      xhr.onload = function (e) {\n        _this15._finishedUploading(files, xhr, e);\n      };\n\n      xhr.ontimeout = function () {\n        _this15._handleUploadError(files, xhr, \"Request timedout after \".concat(_this15.options.timeout / 1000, \" seconds\"));\n      };\n\n      xhr.onerror = function () {\n        _this15._handleUploadError(files, xhr);\n      }; // Some browsers do not have the .upload property\n\n\n      var progressObj = xhr.upload != null ? xhr.upload : xhr;\n\n      progressObj.onprogress = function (e) {\n        return _this15._updateFilesUploadProgress(files, xhr, e);\n      };\n\n      var headers = {\n        Accept: \"application/json\",\n        \"Cache-Control\": \"no-cache\",\n        \"X-Requested-With\": \"XMLHttpRequest\"\n      };\n\n      if (this.options.headers) {\n        Dropzone.extend(headers, this.options.headers);\n      }\n\n      for (var headerName in headers) {\n        var headerValue = headers[headerName];\n\n        if (headerValue) {\n          xhr.setRequestHeader(headerName, headerValue);\n        }\n      }\n\n      var formData = new FormData(); // Adding all @options parameters\n\n      if (this.options.params) {\n        var additionalParams = this.options.params;\n\n        if (typeof additionalParams === \"function\") {\n          additionalParams = additionalParams.call(this, files, xhr, files[0].upload.chunked ? this._getChunk(files[0], xhr) : null);\n        }\n\n        for (var key in additionalParams) {\n          var value = additionalParams[key];\n\n          if (Array.isArray(value)) {\n            // The additional parameter contains an array,\n            // so lets iterate over it to attach each value\n            // individually.\n            for (var i = 0; i < value.length; i++) {\n              formData.append(key, value[i]);\n            }\n          } else {\n            formData.append(key, value);\n          }\n        }\n      } // Let the user add additional data if necessary\n\n\n      var _iterator14 = dropzone_createForOfIteratorHelper(files, true),\n          _step14;\n\n      try {\n        for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n          var _file = _step14.value;\n          this.emit(\"sending\", _file, xhr, formData);\n        }\n      } catch (err) {\n        _iterator14.e(err);\n      } finally {\n        _iterator14.f();\n      }\n\n      if (this.options.uploadMultiple) {\n        this.emit(\"sendingmultiple\", files, xhr, formData);\n      }\n\n      this._addFormElementData(formData); // Finally add the files\n      // Has to be last because some servers (eg: S3) expect the file to be the last parameter\n\n\n      for (var _i3 = 0; _i3 < dataBlocks.length; _i3++) {\n        var dataBlock = dataBlocks[_i3];\n        formData.append(dataBlock.name, dataBlock.data, dataBlock.filename);\n      }\n\n      this.submitRequest(xhr, formData, files);\n    } // Transforms all files with this.options.transformFile and invokes done with the transformed files when done.\n\n  }, {\n    key: \"_transformFiles\",\n    value: function _transformFiles(files, done) {\n      var _this16 = this;\n\n      var transformedFiles = []; // Clumsy way of handling asynchronous calls, until I get to add a proper Future library.\n\n      var doneCounter = 0;\n\n      var _loop = function _loop(i) {\n        _this16.options.transformFile.call(_this16, files[i], function (transformedFile) {\n          transformedFiles[i] = transformedFile;\n\n          if (++doneCounter === files.length) {\n            done(transformedFiles);\n          }\n        });\n      };\n\n      for (var i = 0; i < files.length; i++) {\n        _loop(i);\n      }\n    } // Takes care of adding other input elements of the form to the AJAX request\n\n  }, {\n    key: \"_addFormElementData\",\n    value: function _addFormElementData(formData) {\n      // Take care of other input elements\n      if (this.element.tagName === \"FORM\") {\n        var _iterator15 = dropzone_createForOfIteratorHelper(this.element.querySelectorAll(\"input, textarea, select, button\"), true),\n            _step15;\n\n        try {\n          for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n            var input = _step15.value;\n            var inputName = input.getAttribute(\"name\");\n            var inputType = input.getAttribute(\"type\");\n            if (inputType) inputType = inputType.toLowerCase(); // If the input doesn't have a name, we can't use it.\n\n            if (typeof inputName === \"undefined\" || inputName === null) continue;\n\n            if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\n              // Possibly multiple values\n              var _iterator16 = dropzone_createForOfIteratorHelper(input.options, true),\n                  _step16;\n\n              try {\n                for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n                  var option = _step16.value;\n\n                  if (option.selected) {\n                    formData.append(inputName, option.value);\n                  }\n                }\n              } catch (err) {\n                _iterator16.e(err);\n              } finally {\n                _iterator16.f();\n              }\n            } else if (!inputType || inputType !== \"checkbox\" && inputType !== \"radio\" || input.checked) {\n              formData.append(inputName, input.value);\n            }\n          }\n        } catch (err) {\n          _iterator15.e(err);\n        } finally {\n          _iterator15.f();\n        }\n      }\n    } // Invoked when there is new progress information about given files.\n    // If e is not provided, it is assumed that the upload is finished.\n\n  }, {\n    key: \"_updateFilesUploadProgress\",\n    value: function _updateFilesUploadProgress(files, xhr, e) {\n      if (!files[0].upload.chunked) {\n        // Handle file uploads without chunking\n        var _iterator17 = dropzone_createForOfIteratorHelper(files, true),\n            _step17;\n\n        try {\n          for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n            var file = _step17.value;\n\n            if (file.upload.total && file.upload.bytesSent && file.upload.bytesSent == file.upload.total) {\n              // If both, the `total` and `bytesSent` have already been set, and\n              // they are equal (meaning progress is at 100%), we can skip this\n              // file, since an upload progress shouldn't go down.\n              continue;\n            }\n\n            if (e) {\n              file.upload.progress = 100 * e.loaded / e.total;\n              file.upload.total = e.total;\n              file.upload.bytesSent = e.loaded;\n            } else {\n              // No event, so we're at 100%\n              file.upload.progress = 100;\n              file.upload.bytesSent = file.upload.total;\n            }\n\n            this.emit(\"uploadprogress\", file, file.upload.progress, file.upload.bytesSent);\n          }\n        } catch (err) {\n          _iterator17.e(err);\n        } finally {\n          _iterator17.f();\n        }\n      } else {\n        // Handle chunked file uploads\n        // Chunked upload is not compatible with uploading multiple files in one\n        // request, so we know there's only one file.\n        var _file2 = files[0]; // Since this is a chunked upload, we need to update the appropriate chunk\n        // progress.\n\n        var chunk = this._getChunk(_file2, xhr);\n\n        if (e) {\n          chunk.progress = 100 * e.loaded / e.total;\n          chunk.total = e.total;\n          chunk.bytesSent = e.loaded;\n        } else {\n          // No event, so we're at 100%\n          chunk.progress = 100;\n          chunk.bytesSent = chunk.total;\n        } // Now tally the *file* upload progress from its individual chunks\n\n\n        _file2.upload.progress = 0;\n        _file2.upload.total = 0;\n        _file2.upload.bytesSent = 0;\n\n        for (var i = 0; i < _file2.upload.totalChunkCount; i++) {\n          if (_file2.upload.chunks[i] && typeof _file2.upload.chunks[i].progress !== \"undefined\") {\n            _file2.upload.progress += _file2.upload.chunks[i].progress;\n            _file2.upload.total += _file2.upload.chunks[i].total;\n            _file2.upload.bytesSent += _file2.upload.chunks[i].bytesSent;\n          }\n        } // Since the process is a percentage, we need to divide by the amount of\n        // chunks we've used.\n\n\n        _file2.upload.progress = _file2.upload.progress / _file2.upload.totalChunkCount;\n        this.emit(\"uploadprogress\", _file2, _file2.upload.progress, _file2.upload.bytesSent);\n      }\n    }\n  }, {\n    key: \"_finishedUploading\",\n    value: function _finishedUploading(files, xhr, e) {\n      var response;\n\n      if (files[0].status === Dropzone.CANCELED) {\n        return;\n      }\n\n      if (xhr.readyState !== 4) {\n        return;\n      }\n\n      if (xhr.responseType !== \"arraybuffer\" && xhr.responseType !== \"blob\") {\n        response = xhr.responseText;\n\n        if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\n          try {\n            response = JSON.parse(response);\n          } catch (error) {\n            e = error;\n            response = \"Invalid JSON response from server.\";\n          }\n        }\n      }\n\n      this._updateFilesUploadProgress(files, xhr);\n\n      if (!(200 <= xhr.status && xhr.status < 300)) {\n        this._handleUploadError(files, xhr, response);\n      } else {\n        if (files[0].upload.chunked) {\n          files[0].upload.finishedChunkUpload(this._getChunk(files[0], xhr), response);\n        } else {\n          this._finished(files, response, e);\n        }\n      }\n    }\n  }, {\n    key: \"_handleUploadError\",\n    value: function _handleUploadError(files, xhr, response) {\n      if (files[0].status === Dropzone.CANCELED) {\n        return;\n      }\n\n      if (files[0].upload.chunked && this.options.retryChunks) {\n        var chunk = this._getChunk(files[0], xhr);\n\n        if (chunk.retries++ < this.options.retryChunksLimit) {\n          this._uploadData(files, [chunk.dataBlock]);\n\n          return;\n        } else {\n          console.warn(\"Retried this chunk too often. Giving up.\");\n        }\n      }\n\n      this._errorProcessing(files, response || this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr);\n    }\n  }, {\n    key: \"submitRequest\",\n    value: function submitRequest(xhr, formData, files) {\n      if (xhr.readyState != 1) {\n        console.warn(\"Cannot send this request because the XMLHttpRequest.readyState is not OPENED.\");\n        return;\n      }\n\n      xhr.send(formData);\n    } // Called internally when processing is finished.\n    // Individual callbacks have to be called in the appropriate sections.\n\n  }, {\n    key: \"_finished\",\n    value: function _finished(files, responseText, e) {\n      var _iterator18 = dropzone_createForOfIteratorHelper(files, true),\n          _step18;\n\n      try {\n        for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n          var file = _step18.value;\n          file.status = Dropzone.SUCCESS;\n          this.emit(\"success\", file, responseText, e);\n          this.emit(\"complete\", file);\n        }\n      } catch (err) {\n        _iterator18.e(err);\n      } finally {\n        _iterator18.f();\n      }\n\n      if (this.options.uploadMultiple) {\n        this.emit(\"successmultiple\", files, responseText, e);\n        this.emit(\"completemultiple\", files);\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    } // Called internally when processing is finished.\n    // Individual callbacks have to be called in the appropriate sections.\n\n  }, {\n    key: \"_errorProcessing\",\n    value: function _errorProcessing(files, message, xhr) {\n      var _iterator19 = dropzone_createForOfIteratorHelper(files, true),\n          _step19;\n\n      try {\n        for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n          var file = _step19.value;\n          file.status = Dropzone.ERROR;\n          this.emit(\"error\", file, message, xhr);\n          this.emit(\"complete\", file);\n        }\n      } catch (err) {\n        _iterator19.e(err);\n      } finally {\n        _iterator19.f();\n      }\n\n      if (this.options.uploadMultiple) {\n        this.emit(\"errormultiple\", files, message, xhr);\n        this.emit(\"completemultiple\", files);\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    }\n  }], [{\n    key: \"initClass\",\n    value: function initClass() {\n      // Exposing the emitter class, mainly for tests\n      this.prototype.Emitter = Emitter;\n      /*\n       This is a list of all available events you can register on a dropzone object.\n        You can register an event handler like this:\n        dropzone.on(\"dragEnter\", function() { });\n        */\n\n      this.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"addedfiles\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\n      this.prototype._thumbnailQueue = [];\n      this.prototype._processingThumbnail = false;\n    } // global utility\n\n  }, {\n    key: \"extend\",\n    value: function extend(target) {\n      for (var _len2 = arguments.length, objects = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        objects[_key2 - 1] = arguments[_key2];\n      }\n\n      for (var _i4 = 0, _objects = objects; _i4 < _objects.length; _i4++) {\n        var object = _objects[_i4];\n\n        for (var key in object) {\n          var val = object[key];\n          target[key] = val;\n        }\n      }\n\n      return target;\n    }\n  }, {\n    key: \"uuidv4\",\n    value: function uuidv4() {\n      return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n        var r = Math.random() * 16 | 0,\n            v = c === \"x\" ? r : r & 0x3 | 0x8;\n        return v.toString(16);\n      });\n    }\n  }]);\n\n  return Dropzone;\n}(Emitter);\n\n\nDropzone.initClass();\nDropzone.version = \"5.9.3\"; // This is a map of options for your different dropzones. Add configurations\n// to this object for your different dropzone elemens.\n//\n// Example:\n//\n//     Dropzone.options.myDropzoneElementId = { maxFilesize: 1 };\n//\n// To disable autoDiscover for a specific element, you can set `false` as an option:\n//\n//     Dropzone.options.myDisabledElementId = false;\n//\n// And in html:\n//\n//     <form action=\"/upload\" id=\"my-dropzone-element-id\" class=\"dropzone\"></form>\n\nDropzone.options = {}; // Returns the options for an element or undefined if none available.\n\nDropzone.optionsForElement = function (element) {\n  // Get the `Dropzone.options.elementId` for this element if it exists\n  if (element.getAttribute(\"id\")) {\n    return Dropzone.options[camelize(element.getAttribute(\"id\"))];\n  } else {\n    return undefined;\n  }\n}; // Holds a list of all dropzone instances\n\n\nDropzone.instances = []; // Returns the dropzone for given element if any\n\nDropzone.forElement = function (element) {\n  if (typeof element === \"string\") {\n    element = document.querySelector(element);\n  }\n\n  if ((element != null ? element.dropzone : undefined) == null) {\n    throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\n  }\n\n  return element.dropzone;\n}; // Set to false if you don't want Dropzone to automatically find and attach to .dropzone elements.\n\n\nDropzone.autoDiscover = true; // Looks for all .dropzone elements and creates a dropzone for them\n\nDropzone.discover = function () {\n  var dropzones;\n\n  if (document.querySelectorAll) {\n    dropzones = document.querySelectorAll(\".dropzone\");\n  } else {\n    dropzones = []; // IE :(\n\n    var checkElements = function checkElements(elements) {\n      return function () {\n        var result = [];\n\n        var _iterator20 = dropzone_createForOfIteratorHelper(elements, true),\n            _step20;\n\n        try {\n          for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n            var el = _step20.value;\n\n            if (/(^| )dropzone($| )/.test(el.className)) {\n              result.push(dropzones.push(el));\n            } else {\n              result.push(undefined);\n            }\n          }\n        } catch (err) {\n          _iterator20.e(err);\n        } finally {\n          _iterator20.f();\n        }\n\n        return result;\n      }();\n    };\n\n    checkElements(document.getElementsByTagName(\"div\"));\n    checkElements(document.getElementsByTagName(\"form\"));\n  }\n\n  return function () {\n    var result = [];\n\n    var _iterator21 = dropzone_createForOfIteratorHelper(dropzones, true),\n        _step21;\n\n    try {\n      for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n        var dropzone = _step21.value;\n\n        // Create a dropzone unless auto discover has been disabled for specific element\n        if (Dropzone.optionsForElement(dropzone) !== false) {\n          result.push(new Dropzone(dropzone));\n        } else {\n          result.push(undefined);\n        }\n      }\n    } catch (err) {\n      _iterator21.e(err);\n    } finally {\n      _iterator21.f();\n    }\n\n    return result;\n  }();\n}; // Some browsers support drag and drog functionality, but not correctly.\n//\n// So I created a blocklist of userAgents. Yes, yes. Browser sniffing, I know.\n// But what to do when browsers *theoretically* support an API, but crash\n// when using it.\n//\n// This is a list of regular expressions tested against navigator.userAgent\n//\n// ** It should only be used on browser that *do* support the API, but\n// incorrectly **\n\n\nDropzone.blockedBrowsers = [// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API.\n/opera.*(Macintosh|Windows Phone).*version\\/12/i]; // Checks if the browser is supported\n\nDropzone.isBrowserSupported = function () {\n  var capableBrowser = true;\n\n  if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n    if (!(\"classList\" in document.createElement(\"a\"))) {\n      capableBrowser = false;\n    } else {\n      if (Dropzone.blacklistedBrowsers !== undefined) {\n        // Since this has been renamed, this makes sure we don't break older\n        // configuration.\n        Dropzone.blockedBrowsers = Dropzone.blacklistedBrowsers;\n      } // The browser supports the API, but may be blocked.\n\n\n      var _iterator22 = dropzone_createForOfIteratorHelper(Dropzone.blockedBrowsers, true),\n          _step22;\n\n      try {\n        for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n          var regex = _step22.value;\n\n          if (regex.test(navigator.userAgent)) {\n            capableBrowser = false;\n            continue;\n          }\n        }\n      } catch (err) {\n        _iterator22.e(err);\n      } finally {\n        _iterator22.f();\n      }\n    }\n  } else {\n    capableBrowser = false;\n  }\n\n  return capableBrowser;\n};\n\nDropzone.dataURItoBlob = function (dataURI) {\n  // convert base64 to raw binary data held in a string\n  // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n  var byteString = atob(dataURI.split(\",\")[1]); // separate out the mime component\n\n  var mimeString = dataURI.split(\",\")[0].split(\":\")[1].split(\";\")[0]; // write the bytes of the string to an ArrayBuffer\n\n  var ab = new ArrayBuffer(byteString.length);\n  var ia = new Uint8Array(ab);\n\n  for (var i = 0, end = byteString.length, asc = 0 <= end; asc ? i <= end : i >= end; asc ? i++ : i--) {\n    ia[i] = byteString.charCodeAt(i);\n  } // write the ArrayBuffer to a blob\n\n\n  return new Blob([ab], {\n    type: mimeString\n  });\n}; // Returns an array without the rejected item\n\n\nvar without = function without(list, rejectedItem) {\n  return list.filter(function (item) {\n    return item !== rejectedItem;\n  }).map(function (item) {\n    return item;\n  });\n}; // abc-def_ghi -> abcDefGhi\n\n\nvar camelize = function camelize(str) {\n  return str.replace(/[\\-_](\\w)/g, function (match) {\n    return match.charAt(1).toUpperCase();\n  });\n}; // Creates an element from string\n\n\nDropzone.createElement = function (string) {\n  var div = document.createElement(\"div\");\n  div.innerHTML = string;\n  return div.childNodes[0];\n}; // Tests if given element is inside (or simply is) the container\n\n\nDropzone.elementInside = function (element, container) {\n  if (element === container) {\n    return true;\n  } // Coffeescript doesn't support do/while loops\n\n\n  while (element = element.parentNode) {\n    if (element === container) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nDropzone.getElement = function (el, name) {\n  var element;\n\n  if (typeof el === \"string\") {\n    element = document.querySelector(el);\n  } else if (el.nodeType != null) {\n    element = el;\n  }\n\n  if (element == null) {\n    throw new Error(\"Invalid `\".concat(name, \"` option provided. Please provide a CSS selector or a plain HTML element.\"));\n  }\n\n  return element;\n};\n\nDropzone.getElements = function (els, name) {\n  var el, elements;\n\n  if (els instanceof Array) {\n    elements = [];\n\n    try {\n      var _iterator23 = dropzone_createForOfIteratorHelper(els, true),\n          _step23;\n\n      try {\n        for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n          el = _step23.value;\n          elements.push(this.getElement(el, name));\n        }\n      } catch (err) {\n        _iterator23.e(err);\n      } finally {\n        _iterator23.f();\n      }\n    } catch (e) {\n      elements = null;\n    }\n  } else if (typeof els === \"string\") {\n    elements = [];\n\n    var _iterator24 = dropzone_createForOfIteratorHelper(document.querySelectorAll(els), true),\n        _step24;\n\n    try {\n      for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n        el = _step24.value;\n        elements.push(el);\n      }\n    } catch (err) {\n      _iterator24.e(err);\n    } finally {\n      _iterator24.f();\n    }\n  } else if (els.nodeType != null) {\n    elements = [els];\n  }\n\n  if (elements == null || !elements.length) {\n    throw new Error(\"Invalid `\".concat(name, \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\"));\n  }\n\n  return elements;\n}; // Asks the user the question and calls accepted or rejected accordingly\n//\n// The default implementation just uses `window.confirm` and then calls the\n// appropriate callback.\n\n\nDropzone.confirm = function (question, accepted, rejected) {\n  if (window.confirm(question)) {\n    return accepted();\n  } else if (rejected != null) {\n    return rejected();\n  }\n}; // Validates the mime type like this:\n//\n// https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept\n\n\nDropzone.isValidFile = function (file, acceptedFiles) {\n  if (!acceptedFiles) {\n    return true;\n  } // If there are no accepted mime types, it's OK\n\n\n  acceptedFiles = acceptedFiles.split(\",\");\n  var mimeType = file.type;\n  var baseMimeType = mimeType.replace(/\\/.*$/, \"\");\n\n  var _iterator25 = dropzone_createForOfIteratorHelper(acceptedFiles, true),\n      _step25;\n\n  try {\n    for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n      var validType = _step25.value;\n      validType = validType.trim();\n\n      if (validType.charAt(0) === \".\") {\n        if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n          return true;\n        }\n      } else if (/\\/\\*$/.test(validType)) {\n        // This is something like a image/* mime type\n        if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\n          return true;\n        }\n      } else {\n        if (mimeType === validType) {\n          return true;\n        }\n      }\n    }\n  } catch (err) {\n    _iterator25.e(err);\n  } finally {\n    _iterator25.f();\n  }\n\n  return false;\n}; // Augment jQuery\n\n\nif (typeof jQuery !== \"undefined\" && jQuery !== null) {\n  jQuery.fn.dropzone = function (options) {\n    return this.each(function () {\n      return new Dropzone(this, options);\n    });\n  };\n} // Dropzone file status codes\n\n\nDropzone.ADDED = \"added\";\nDropzone.QUEUED = \"queued\"; // For backwards compatibility. Now, if a file is accepted, it's either queued\n// or uploading.\n\nDropzone.ACCEPTED = Dropzone.QUEUED;\nDropzone.UPLOADING = \"uploading\";\nDropzone.PROCESSING = Dropzone.UPLOADING; // alias\n\nDropzone.CANCELED = \"canceled\";\nDropzone.ERROR = \"error\";\nDropzone.SUCCESS = \"success\";\n/*\n\n Bugfix for iOS 6 and 7\n Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n based on the work of https://github.com/stomita/ios-imagefile-megapixel\n\n */\n// Detecting vertical squash in loaded image.\n// Fixes a bug which squash image vertically while drawing into canvas for some images.\n// This is a bug in iOS6 devices. This function from https://github.com/stomita/ios-imagefile-megapixel\n\nvar detectVerticalSquash = function detectVerticalSquash(img) {\n  var iw = img.naturalWidth;\n  var ih = img.naturalHeight;\n  var canvas = document.createElement(\"canvas\");\n  canvas.width = 1;\n  canvas.height = ih;\n  var ctx = canvas.getContext(\"2d\");\n  ctx.drawImage(img, 0, 0);\n\n  var _ctx$getImageData = ctx.getImageData(1, 0, 1, ih),\n      data = _ctx$getImageData.data; // search image edge pixel position in case it is squashed vertically.\n\n\n  var sy = 0;\n  var ey = ih;\n  var py = ih;\n\n  while (py > sy) {\n    var alpha = data[(py - 1) * 4 + 3];\n\n    if (alpha === 0) {\n      ey = py;\n    } else {\n      sy = py;\n    }\n\n    py = ey + sy >> 1;\n  }\n\n  var ratio = py / ih;\n\n  if (ratio === 0) {\n    return 1;\n  } else {\n    return ratio;\n  }\n}; // A replacement for context.drawImage\n// (args are for source and destination).\n\n\nvar drawImageIOSFix = function drawImageIOSFix(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n  var vertSquashRatio = detectVerticalSquash(img);\n  return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n}; // Based on MinifyJpeg\n// Source: http://www.perry.cz/files/ExifRestorer.js\n// http://elicon.blog57.fc2.com/blog-entry-206.html\n\n\nvar ExifRestore = /*#__PURE__*/function () {\n  function ExifRestore() {\n    dropzone_classCallCheck(this, ExifRestore);\n  }\n\n  dropzone_createClass(ExifRestore, null, [{\n    key: \"initClass\",\n    value: function initClass() {\n      this.KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n    }\n  }, {\n    key: \"encode64\",\n    value: function encode64(input) {\n      var output = \"\";\n      var chr1 = undefined;\n      var chr2 = undefined;\n      var chr3 = \"\";\n      var enc1 = undefined;\n      var enc2 = undefined;\n      var enc3 = undefined;\n      var enc4 = \"\";\n      var i = 0;\n\n      while (true) {\n        chr1 = input[i++];\n        chr2 = input[i++];\n        chr3 = input[i++];\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n\n        output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n\n        if (!(i < input.length)) {\n          break;\n        }\n      }\n\n      return output;\n    }\n  }, {\n    key: \"restore\",\n    value: function restore(origFileBase64, resizedFileBase64) {\n      if (!origFileBase64.match(\"data:image/jpeg;base64,\")) {\n        return resizedFileBase64;\n      }\n\n      var rawImage = this.decode64(origFileBase64.replace(\"data:image/jpeg;base64,\", \"\"));\n      var segments = this.slice2Segments(rawImage);\n      var image = this.exifManipulation(resizedFileBase64, segments);\n      return \"data:image/jpeg;base64,\".concat(this.encode64(image));\n    }\n  }, {\n    key: \"exifManipulation\",\n    value: function exifManipulation(resizedFileBase64, segments) {\n      var exifArray = this.getExifArray(segments);\n      var newImageArray = this.insertExif(resizedFileBase64, exifArray);\n      var aBuffer = new Uint8Array(newImageArray);\n      return aBuffer;\n    }\n  }, {\n    key: \"getExifArray\",\n    value: function getExifArray(segments) {\n      var seg = undefined;\n      var x = 0;\n\n      while (x < segments.length) {\n        seg = segments[x];\n\n        if (seg[0] === 255 & seg[1] === 225) {\n          return seg;\n        }\n\n        x++;\n      }\n\n      return [];\n    }\n  }, {\n    key: \"insertExif\",\n    value: function insertExif(resizedFileBase64, exifArray) {\n      var imageData = resizedFileBase64.replace(\"data:image/jpeg;base64,\", \"\");\n      var buf = this.decode64(imageData);\n      var separatePoint = buf.indexOf(255, 3);\n      var mae = buf.slice(0, separatePoint);\n      var ato = buf.slice(separatePoint);\n      var array = mae;\n      array = array.concat(exifArray);\n      array = array.concat(ato);\n      return array;\n    }\n  }, {\n    key: \"slice2Segments\",\n    value: function slice2Segments(rawImageArray) {\n      var head = 0;\n      var segments = [];\n\n      while (true) {\n        var length;\n\n        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) {\n          break;\n        }\n\n        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) {\n          head += 2;\n        } else {\n          length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3];\n          var endPoint = head + length + 2;\n          var seg = rawImageArray.slice(head, endPoint);\n          segments.push(seg);\n          head = endPoint;\n        }\n\n        if (head > rawImageArray.length) {\n          break;\n        }\n      }\n\n      return segments;\n    }\n  }, {\n    key: \"decode64\",\n    value: function decode64(input) {\n      var output = \"\";\n      var chr1 = undefined;\n      var chr2 = undefined;\n      var chr3 = \"\";\n      var enc1 = undefined;\n      var enc2 = undefined;\n      var enc3 = undefined;\n      var enc4 = \"\";\n      var i = 0;\n      var buf = []; // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n\n      if (base64test.exec(input)) {\n        console.warn(\"There were invalid base64 characters in the input text.\\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\\nExpect errors in decoding.\");\n      }\n\n      input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n      while (true) {\n        enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n        buf.push(chr1);\n\n        if (enc3 !== 64) {\n          buf.push(chr2);\n        }\n\n        if (enc4 !== 64) {\n          buf.push(chr3);\n        }\n\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n\n        if (!(i < input.length)) {\n          break;\n        }\n      }\n\n      return buf;\n    }\n  }]);\n\n  return ExifRestore;\n}();\n\nExifRestore.initClass();\n/*\n * contentloaded.js\n *\n * Author: Diego Perini (diego.perini at gmail.com)\n * Summary: cross-browser wrapper for DOMContentLoaded\n * Updated: 20101020\n * License: MIT\n * Version: 1.2\n *\n * URL:\n * http://javascript.nwbox.com/ContentLoaded/\n * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n */\n// @win window reference\n// @fn function reference\n\nvar contentLoaded = function contentLoaded(win, fn) {\n  var done = false;\n  var top = true;\n  var doc = win.document;\n  var root = doc.documentElement;\n  var add = doc.addEventListener ? \"addEventListener\" : \"attachEvent\";\n  var rem = doc.addEventListener ? \"removeEventListener\" : \"detachEvent\";\n  var pre = doc.addEventListener ? \"\" : \"on\";\n\n  var init = function init(e) {\n    if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\n      return;\n    }\n\n    (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\n\n    if (!done && (done = true)) {\n      return fn.call(win, e.type || e);\n    }\n  };\n\n  var poll = function poll() {\n    try {\n      root.doScroll(\"left\");\n    } catch (e) {\n      setTimeout(poll, 50);\n      return;\n    }\n\n    return init(\"poll\");\n  };\n\n  if (doc.readyState !== \"complete\") {\n    if (doc.createEventObject && root.doScroll) {\n      try {\n        top = !win.frameElement;\n      } catch (error) {}\n\n      if (top) {\n        poll();\n      }\n    }\n\n    doc[add](pre + \"DOMContentLoaded\", init, false);\n    doc[add](pre + \"readystatechange\", init, false);\n    return win[add](pre + \"load\", init, false);\n  }\n}; // As a single function to be able to write tests.\n\n\nDropzone._autoDiscoverFunction = function () {\n  if (Dropzone.autoDiscover) {\n    return Dropzone.discover();\n  }\n};\n\ncontentLoaded(window, Dropzone._autoDiscoverFunction);\n\nfunction __guard__(value, transform) {\n  return typeof value !== \"undefined\" && value !== null ? transform(value) : undefined;\n}\n\nfunction __guardMethod__(obj, methodName, transform) {\n  if (typeof obj !== \"undefined\" && obj !== null && typeof obj[methodName] === \"function\") {\n    return transform(obj, methodName);\n  } else {\n    return undefined;\n  }\n}\n\n\n;// CONCATENATED MODULE: ./tool/dropzone.dist.js\n /// Make Dropzone a global variable.\n\nwindow.Dropzone = Dropzone;\n/* harmony default export */ var dropzone_dist = (Dropzone);\n\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});", "(function(global, factory) {\n  typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : (global = typeof globalThis !== \"undefined\" ? globalThis : global || self, \n  factory(global.ActiveStorage = {}));\n})(this, (function(exports) {\n  \"use strict\";\n  var sparkMd5 = {\n    exports: {}\n  };\n  (function(module, exports) {\n    (function(factory) {\n      {\n        module.exports = factory();\n      }\n    })((function(undefined$1) {\n      var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n      function md5cycle(x, k) {\n        var a = x[0], b = x[1], c = x[2], d = x[3];\n        a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[10] - 42063 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b ^ c ^ d) + k[5] - 378558 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        x[0] = a + x[0] | 0;\n        x[1] = b + x[1] | 0;\n        x[2] = c + x[2] | 0;\n        x[3] = d + x[3] | 0;\n      }\n      function md5blk(s) {\n        var md5blks = [], i;\n        for (i = 0; i < 64; i += 4) {\n          md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n        }\n        return md5blks;\n      }\n      function md5blk_array(a) {\n        var md5blks = [], i;\n        for (i = 0; i < 64; i += 4) {\n          md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n        }\n        return md5blks;\n      }\n      function md51(s) {\n        var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n        for (i = 64; i <= n; i += 64) {\n          md5cycle(state, md5blk(s.substring(i - 64, i)));\n        }\n        s = s.substring(i - 64);\n        length = s.length;\n        tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n        }\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n        if (i > 55) {\n          md5cycle(state, tail);\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(state, tail);\n        return state;\n      }\n      function md51_array(a) {\n        var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n        for (i = 64; i <= n; i += 64) {\n          md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n        }\n        a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n        length = a.length;\n        tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= a[i] << (i % 4 << 3);\n        }\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n        if (i > 55) {\n          md5cycle(state, tail);\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(state, tail);\n        return state;\n      }\n      function rhex(n) {\n        var s = \"\", j;\n        for (j = 0; j < 4; j += 1) {\n          s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n        }\n        return s;\n      }\n      function hex(x) {\n        var i;\n        for (i = 0; i < x.length; i += 1) {\n          x[i] = rhex(x[i]);\n        }\n        return x.join(\"\");\n      }\n      if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n      if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n        (function() {\n          function clamp(val, length) {\n            val = val | 0 || 0;\n            if (val < 0) {\n              return Math.max(val + length, 0);\n            }\n            return Math.min(val, length);\n          }\n          ArrayBuffer.prototype.slice = function(from, to) {\n            var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n            if (to !== undefined$1) {\n              end = clamp(to, length);\n            }\n            if (begin > end) {\n              return new ArrayBuffer(0);\n            }\n            num = end - begin;\n            target = new ArrayBuffer(num);\n            targetArray = new Uint8Array(target);\n            sourceArray = new Uint8Array(this, begin, num);\n            targetArray.set(sourceArray);\n            return target;\n          };\n        })();\n      }\n      function toUtf8(str) {\n        if (/[\\u0080-\\uFFFF]/.test(str)) {\n          str = unescape(encodeURIComponent(str));\n        }\n        return str;\n      }\n      function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n        var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n        for (i = 0; i < length; i += 1) {\n          arr[i] = str.charCodeAt(i);\n        }\n        return returnUInt8Array ? arr : buff;\n      }\n      function arrayBuffer2Utf8Str(buff) {\n        return String.fromCharCode.apply(null, new Uint8Array(buff));\n      }\n      function concatenateArrayBuffers(first, second, returnUInt8Array) {\n        var result = new Uint8Array(first.byteLength + second.byteLength);\n        result.set(new Uint8Array(first));\n        result.set(new Uint8Array(second), first.byteLength);\n        return returnUInt8Array ? result : result.buffer;\n      }\n      function hexToBinaryString(hex) {\n        var bytes = [], length = hex.length, x;\n        for (x = 0; x < length - 1; x += 2) {\n          bytes.push(parseInt(hex.substr(x, 2), 16));\n        }\n        return String.fromCharCode.apply(String, bytes);\n      }\n      function SparkMD5() {\n        this.reset();\n      }\n      SparkMD5.prototype.append = function(str) {\n        this.appendBinary(toUtf8(str));\n        return this;\n      };\n      SparkMD5.prototype.appendBinary = function(contents) {\n        this._buff += contents;\n        this._length += contents.length;\n        var length = this._buff.length, i;\n        for (i = 64; i <= length; i += 64) {\n          md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n        }\n        this._buff = this._buff.substring(i - 64);\n        return this;\n      };\n      SparkMD5.prototype.end = function(raw) {\n        var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n        }\n        this._finish(tail, length);\n        ret = hex(this._hash);\n        if (raw) {\n          ret = hexToBinaryString(ret);\n        }\n        this.reset();\n        return ret;\n      };\n      SparkMD5.prototype.reset = function() {\n        this._buff = \"\";\n        this._length = 0;\n        this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n        return this;\n      };\n      SparkMD5.prototype.getState = function() {\n        return {\n          buff: this._buff,\n          length: this._length,\n          hash: this._hash.slice()\n        };\n      };\n      SparkMD5.prototype.setState = function(state) {\n        this._buff = state.buff;\n        this._length = state.length;\n        this._hash = state.hash;\n        return this;\n      };\n      SparkMD5.prototype.destroy = function() {\n        delete this._hash;\n        delete this._buff;\n        delete this._length;\n      };\n      SparkMD5.prototype._finish = function(tail, length) {\n        var i = length, tmp, lo, hi;\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n        if (i > 55) {\n          md5cycle(this._hash, tail);\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n        tmp = this._length * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(this._hash, tail);\n      };\n      SparkMD5.hash = function(str, raw) {\n        return SparkMD5.hashBinary(toUtf8(str), raw);\n      };\n      SparkMD5.hashBinary = function(content, raw) {\n        var hash = md51(content), ret = hex(hash);\n        return raw ? hexToBinaryString(ret) : ret;\n      };\n      SparkMD5.ArrayBuffer = function() {\n        this.reset();\n      };\n      SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n        this._length += arr.byteLength;\n        for (i = 64; i <= length; i += 64) {\n          md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n        }\n        this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n        return this;\n      };\n      SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n        var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= buff[i] << (i % 4 << 3);\n        }\n        this._finish(tail, length);\n        ret = hex(this._hash);\n        if (raw) {\n          ret = hexToBinaryString(ret);\n        }\n        this.reset();\n        return ret;\n      };\n      SparkMD5.ArrayBuffer.prototype.reset = function() {\n        this._buff = new Uint8Array(0);\n        this._length = 0;\n        this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n        return this;\n      };\n      SparkMD5.ArrayBuffer.prototype.getState = function() {\n        var state = SparkMD5.prototype.getState.call(this);\n        state.buff = arrayBuffer2Utf8Str(state.buff);\n        return state;\n      };\n      SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n        state.buff = utf8Str2ArrayBuffer(state.buff, true);\n        return SparkMD5.prototype.setState.call(this, state);\n      };\n      SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n      SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n      SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n        var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n        return raw ? hexToBinaryString(ret) : ret;\n      };\n      return SparkMD5;\n    }));\n  })(sparkMd5);\n  var SparkMD5 = sparkMd5.exports;\n  const fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n  class FileChecksum {\n    static create(file, callback) {\n      const instance = new FileChecksum(file);\n      instance.create(callback);\n    }\n    constructor(file) {\n      this.file = file;\n      this.chunkSize = 2097152;\n      this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n      this.chunkIndex = 0;\n    }\n    create(callback) {\n      this.callback = callback;\n      this.md5Buffer = new SparkMD5.ArrayBuffer;\n      this.fileReader = new FileReader;\n      this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n      this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n      this.readNextChunk();\n    }\n    fileReaderDidLoad(event) {\n      this.md5Buffer.append(event.target.result);\n      if (!this.readNextChunk()) {\n        const binaryDigest = this.md5Buffer.end(true);\n        const base64digest = btoa(binaryDigest);\n        this.callback(null, base64digest);\n      }\n    }\n    fileReaderDidError(event) {\n      this.callback(`Error reading ${this.file.name}`);\n    }\n    readNextChunk() {\n      if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n        const start = this.chunkIndex * this.chunkSize;\n        const end = Math.min(start + this.chunkSize, this.file.size);\n        const bytes = fileSlice.call(this.file, start, end);\n        this.fileReader.readAsArrayBuffer(bytes);\n        this.chunkIndex++;\n        return true;\n      } else {\n        return false;\n      }\n    }\n  }\n  function getMetaValue(name) {\n    const element = findElement(document.head, `meta[name=\"${name}\"]`);\n    if (element) {\n      return element.getAttribute(\"content\");\n    }\n  }\n  function findElements(root, selector) {\n    if (typeof root == \"string\") {\n      selector = root;\n      root = document;\n    }\n    const elements = root.querySelectorAll(selector);\n    return toArray(elements);\n  }\n  function findElement(root, selector) {\n    if (typeof root == \"string\") {\n      selector = root;\n      root = document;\n    }\n    return root.querySelector(selector);\n  }\n  function dispatchEvent(element, type, eventInit = {}) {\n    const {disabled: disabled} = element;\n    const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n    const event = document.createEvent(\"Event\");\n    event.initEvent(type, bubbles || true, cancelable || true);\n    event.detail = detail || {};\n    try {\n      element.disabled = false;\n      element.dispatchEvent(event);\n    } finally {\n      element.disabled = disabled;\n    }\n    return event;\n  }\n  function toArray(value) {\n    if (Array.isArray(value)) {\n      return value;\n    } else if (Array.from) {\n      return Array.from(value);\n    } else {\n      return [].slice.call(value);\n    }\n  }\n  class BlobRecord {\n    constructor(file, checksum, url, customHeaders = {}) {\n      this.file = file;\n      this.attributes = {\n        filename: file.name,\n        content_type: file.type || \"application/octet-stream\",\n        byte_size: file.size,\n        checksum: checksum\n      };\n      this.xhr = new XMLHttpRequest;\n      this.xhr.open(\"POST\", url, true);\n      this.xhr.responseType = \"json\";\n      this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n      this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n      this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      Object.keys(customHeaders).forEach((headerKey => {\n        this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n      }));\n      const csrfToken = getMetaValue(\"csrf-token\");\n      if (csrfToken != undefined) {\n        this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n      }\n      this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n      this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n    }\n    get status() {\n      return this.xhr.status;\n    }\n    get response() {\n      const {responseType: responseType, response: response} = this.xhr;\n      if (responseType == \"json\") {\n        return response;\n      } else {\n        return JSON.parse(response);\n      }\n    }\n    create(callback) {\n      this.callback = callback;\n      this.xhr.send(JSON.stringify({\n        blob: this.attributes\n      }));\n    }\n    requestDidLoad(event) {\n      if (this.status >= 200 && this.status < 300) {\n        const {response: response} = this;\n        const {direct_upload: direct_upload} = response;\n        delete response.direct_upload;\n        this.attributes = response;\n        this.directUploadData = direct_upload;\n        this.callback(null, this.toJSON());\n      } else {\n        this.requestDidError(event);\n      }\n    }\n    requestDidError(event) {\n      this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n    }\n    toJSON() {\n      const result = {};\n      for (const key in this.attributes) {\n        result[key] = this.attributes[key];\n      }\n      return result;\n    }\n  }\n  class BlobUpload {\n    constructor(blob) {\n      this.blob = blob;\n      this.file = blob.file;\n      const {url: url, headers: headers} = blob.directUploadData;\n      this.xhr = new XMLHttpRequest;\n      this.xhr.open(\"PUT\", url, true);\n      this.xhr.responseType = \"text\";\n      for (const key in headers) {\n        this.xhr.setRequestHeader(key, headers[key]);\n      }\n      this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n      this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n    }\n    create(callback) {\n      this.callback = callback;\n      this.xhr.send(this.file.slice());\n    }\n    requestDidLoad(event) {\n      const {status: status, response: response} = this.xhr;\n      if (status >= 200 && status < 300) {\n        this.callback(null, response);\n      } else {\n        this.requestDidError(event);\n      }\n    }\n    requestDidError(event) {\n      this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n    }\n  }\n  let id = 0;\n  class DirectUpload {\n    constructor(file, url, delegate, customHeaders = {}) {\n      this.id = ++id;\n      this.file = file;\n      this.url = url;\n      this.delegate = delegate;\n      this.customHeaders = customHeaders;\n    }\n    create(callback) {\n      FileChecksum.create(this.file, ((error, checksum) => {\n        if (error) {\n          callback(error);\n          return;\n        }\n        const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n        notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n        blob.create((error => {\n          if (error) {\n            callback(error);\n          } else {\n            const upload = new BlobUpload(blob);\n            notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n            upload.create((error => {\n              if (error) {\n                callback(error);\n              } else {\n                callback(null, blob.toJSON());\n              }\n            }));\n          }\n        }));\n      }));\n    }\n  }\n  function notify(object, methodName, ...messages) {\n    if (object && typeof object[methodName] == \"function\") {\n      return object[methodName](...messages);\n    }\n  }\n  class DirectUploadController {\n    constructor(input, file) {\n      this.input = input;\n      this.file = file;\n      this.directUpload = new DirectUpload(this.file, this.url, this);\n      this.dispatch(\"initialize\");\n    }\n    start(callback) {\n      const hiddenInput = document.createElement(\"input\");\n      hiddenInput.type = \"hidden\";\n      hiddenInput.name = this.input.name;\n      this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n      this.dispatch(\"start\");\n      this.directUpload.create(((error, attributes) => {\n        if (error) {\n          hiddenInput.parentNode.removeChild(hiddenInput);\n          this.dispatchError(error);\n        } else {\n          hiddenInput.value = attributes.signed_id;\n        }\n        this.dispatch(\"end\");\n        callback(error);\n      }));\n    }\n    uploadRequestDidProgress(event) {\n      const progress = event.loaded / event.total * 100;\n      if (progress) {\n        this.dispatch(\"progress\", {\n          progress: progress\n        });\n      }\n    }\n    get url() {\n      return this.input.getAttribute(\"data-direct-upload-url\");\n    }\n    dispatch(name, detail = {}) {\n      detail.file = this.file;\n      detail.id = this.directUpload.id;\n      return dispatchEvent(this.input, `direct-upload:${name}`, {\n        detail: detail\n      });\n    }\n    dispatchError(error) {\n      const event = this.dispatch(\"error\", {\n        error: error\n      });\n      if (!event.defaultPrevented) {\n        alert(error);\n      }\n    }\n    directUploadWillCreateBlobWithXHR(xhr) {\n      this.dispatch(\"before-blob-request\", {\n        xhr: xhr\n      });\n    }\n    directUploadWillStoreFileWithXHR(xhr) {\n      this.dispatch(\"before-storage-request\", {\n        xhr: xhr\n      });\n      xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n    }\n  }\n  const inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n  class DirectUploadsController {\n    constructor(form) {\n      this.form = form;\n      this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n    }\n    start(callback) {\n      const controllers = this.createDirectUploadControllers();\n      const startNextController = () => {\n        const controller = controllers.shift();\n        if (controller) {\n          controller.start((error => {\n            if (error) {\n              callback(error);\n              this.dispatch(\"end\");\n            } else {\n              startNextController();\n            }\n          }));\n        } else {\n          callback();\n          this.dispatch(\"end\");\n        }\n      };\n      this.dispatch(\"start\");\n      startNextController();\n    }\n    createDirectUploadControllers() {\n      const controllers = [];\n      this.inputs.forEach((input => {\n        toArray(input.files).forEach((file => {\n          const controller = new DirectUploadController(input, file);\n          controllers.push(controller);\n        }));\n      }));\n      return controllers;\n    }\n    dispatch(name, detail = {}) {\n      return dispatchEvent(this.form, `direct-uploads:${name}`, {\n        detail: detail\n      });\n    }\n  }\n  const processingAttribute = \"data-direct-uploads-processing\";\n  const submitButtonsByForm = new WeakMap;\n  let started = false;\n  function start() {\n    if (!started) {\n      started = true;\n      document.addEventListener(\"click\", didClick, true);\n      document.addEventListener(\"submit\", didSubmitForm, true);\n      document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n    }\n  }\n  function didClick(event) {\n    const button = event.target.closest(\"button, input\");\n    if (button && button.type === \"submit\" && button.form) {\n      submitButtonsByForm.set(button.form, button);\n    }\n  }\n  function didSubmitForm(event) {\n    handleFormSubmissionEvent(event);\n  }\n  function didSubmitRemoteElement(event) {\n    if (event.target.tagName == \"FORM\") {\n      handleFormSubmissionEvent(event);\n    }\n  }\n  function handleFormSubmissionEvent(event) {\n    const form = event.target;\n    if (form.hasAttribute(processingAttribute)) {\n      event.preventDefault();\n      return;\n    }\n    const controller = new DirectUploadsController(form);\n    const {inputs: inputs} = controller;\n    if (inputs.length) {\n      event.preventDefault();\n      form.setAttribute(processingAttribute, \"\");\n      inputs.forEach(disable);\n      controller.start((error => {\n        form.removeAttribute(processingAttribute);\n        if (error) {\n          inputs.forEach(enable);\n        } else {\n          submitForm(form);\n        }\n      }));\n    }\n  }\n  function submitForm(form) {\n    let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n    if (button) {\n      const {disabled: disabled} = button;\n      button.disabled = false;\n      button.focus();\n      button.click();\n      button.disabled = disabled;\n    } else {\n      button = document.createElement(\"input\");\n      button.type = \"submit\";\n      button.style.display = \"none\";\n      form.appendChild(button);\n      button.click();\n      form.removeChild(button);\n    }\n    submitButtonsByForm.delete(form);\n  }\n  function disable(input) {\n    input.disabled = true;\n  }\n  function enable(input) {\n    input.disabled = false;\n  }\n  function autostart() {\n    if (window.ActiveStorage) {\n      start();\n    }\n  }\n  setTimeout(autostart, 1);\n  exports.DirectUpload = DirectUpload;\n  exports.DirectUploadController = DirectUploadController;\n  exports.DirectUploadsController = DirectUploadsController;\n  exports.dispatchEvent = dispatchEvent;\n  exports.start = start;\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n}));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'ffffffff-ffff-ffff-ffff-ffffffffffff';\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = '00000000-0000-0000-0000-000000000000';\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst regex_js_1 = require(\"./regex.js\");\nfunction validate(uuid) {\n    return typeof uuid === 'string' && regex_js_1.default.test(uuid);\n}\nexports.default = validate;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_js_1 = require(\"./validate.js\");\nfunction parse(uuid) {\n    if (!(0, validate_js_1.default)(uuid)) {\n        throw TypeError('Invalid UUID');\n    }\n    let v;\n    return Uint8Array.of((v = parseInt(uuid.slice(0, 8), 16)) >>> 24, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff, (v = parseInt(uuid.slice(9, 13), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(14, 18), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(19, 23), 16)) >>> 8, v & 0xff, ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff, (v / 0x100000000) & 0xff, (v >>> 24) & 0xff, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff);\n}\nexports.default = parse;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsafeStringify = void 0;\nconst validate_js_1 = require(\"./validate.js\");\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nfunction unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\nexports.unsafeStringify = unsafeStringify;\nfunction stringify(arr, offset = 0) {\n    const uuid = unsafeStringify(arr, offset);\n    if (!(0, validate_js_1.default)(uuid)) {\n        throw TypeError('Stringified UUID is invalid');\n    }\n    return uuid;\n}\nexports.default = stringify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nfunction rng() {\n    if (!getRandomValues) {\n        if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n            throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n        }\n        getRandomValues = crypto.getRandomValues.bind(crypto);\n    }\n    return getRandomValues(rnds8);\n}\nexports.default = rng;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.updateV1State = void 0;\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nconst _state = {};\nfunction v1(options, buf, offset) {\n    let bytes;\n    const isV6 = options?._v6 ?? false;\n    if (options) {\n        const optionsKeys = Object.keys(options);\n        if (optionsKeys.length === 1 && optionsKeys[0] === '_v6') {\n            options = undefined;\n        }\n    }\n    if (options) {\n        bytes = v1Bytes(options.random ?? options.rng?.() ?? (0, rng_js_1.default)(), options.msecs, options.nsecs, options.clockseq, options.node, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = (0, rng_js_1.default)();\n        updateV1State(_state, now, rnds);\n        bytes = v1Bytes(rnds, _state.msecs, _state.nsecs, isV6 ? undefined : _state.clockseq, isV6 ? undefined : _state.node, buf, offset);\n    }\n    return buf ?? (0, stringify_js_1.unsafeStringify)(bytes);\n}\nfunction updateV1State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.nsecs ??= 0;\n    if (now === state.msecs) {\n        state.nsecs++;\n        if (state.nsecs >= 10000) {\n            state.node = undefined;\n            state.nsecs = 0;\n        }\n    }\n    else if (now > state.msecs) {\n        state.nsecs = 0;\n    }\n    else if (now < state.msecs) {\n        state.node = undefined;\n    }\n    if (!state.node) {\n        state.node = rnds.slice(10, 16);\n        state.node[0] |= 0x01;\n        state.clockseq = ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n    }\n    state.msecs = now;\n    return state;\n}\nexports.updateV1State = updateV1State;\nfunction v1Bytes(rnds, msecs, nsecs, clockseq, node, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    nsecs ??= 0;\n    clockseq ??= ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n    node ??= rnds.slice(10, 16);\n    msecs += 12219292800000;\n    const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n    buf[offset++] = (tl >>> 24) & 0xff;\n    buf[offset++] = (tl >>> 16) & 0xff;\n    buf[offset++] = (tl >>> 8) & 0xff;\n    buf[offset++] = tl & 0xff;\n    const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;\n    buf[offset++] = (tmh >>> 8) & 0xff;\n    buf[offset++] = tmh & 0xff;\n    buf[offset++] = ((tmh >>> 24) & 0xf) | 0x10;\n    buf[offset++] = (tmh >>> 16) & 0xff;\n    buf[offset++] = (clockseq >>> 8) | 0x80;\n    buf[offset++] = clockseq & 0xff;\n    for (let n = 0; n < 6; ++n) {\n        buf[offset++] = node[n];\n    }\n    return buf;\n}\nexports.default = v1;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v1ToV6(uuid) {\n    const v1Bytes = typeof uuid === 'string' ? (0, parse_js_1.default)(uuid) : uuid;\n    const v6Bytes = _v1ToV6(v1Bytes);\n    return typeof uuid === 'string' ? (0, stringify_js_1.unsafeStringify)(v6Bytes) : v6Bytes;\n}\nexports.default = v1ToV6;\nfunction _v1ToV6(v1Bytes) {\n    return Uint8Array.of(((v1Bytes[6] & 0x0f) << 4) | ((v1Bytes[7] >> 4) & 0x0f), ((v1Bytes[7] & 0x0f) << 4) | ((v1Bytes[4] & 0xf0) >> 4), ((v1Bytes[4] & 0x0f) << 4) | ((v1Bytes[5] & 0xf0) >> 4), ((v1Bytes[5] & 0x0f) << 4) | ((v1Bytes[0] & 0xf0) >> 4), ((v1Bytes[0] & 0x0f) << 4) | ((v1Bytes[1] & 0xf0) >> 4), ((v1Bytes[1] & 0x0f) << 4) | ((v1Bytes[2] & 0xf0) >> 4), 0x60 | (v1Bytes[2] & 0x0f), v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction md5(bytes) {\n    const words = uint8ToUint32(bytes);\n    const md5Bytes = wordsToMd5(words, bytes.length * 8);\n    return uint32ToUint8(md5Bytes);\n}\nfunction uint32ToUint8(input) {\n    const bytes = new Uint8Array(input.length * 4);\n    for (let i = 0; i < input.length * 4; i++) {\n        bytes[i] = (input[i >> 2] >>> ((i % 4) * 8)) & 0xff;\n    }\n    return bytes;\n}\nfunction getOutputLength(inputLength8) {\n    return (((inputLength8 + 64) >>> 9) << 4) + 14 + 1;\n}\nfunction wordsToMd5(x, len) {\n    const xpad = new Uint32Array(getOutputLength(len)).fill(0);\n    xpad.set(x);\n    xpad[len >> 5] |= 0x80 << len % 32;\n    xpad[xpad.length - 1] = len;\n    x = xpad;\n    let a = 1732584193;\n    let b = -271733879;\n    let c = -1732584194;\n    let d = 271733878;\n    for (let i = 0; i < x.length; i += 16) {\n        const olda = a;\n        const oldb = b;\n        const oldc = c;\n        const oldd = d;\n        a = md5ff(a, b, c, d, x[i], 7, -680876936);\n        d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n        c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n        b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n        a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n        d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n        c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n        b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n        a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n        d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n        c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n        b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n        a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n        d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n        c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n        b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n        a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n        d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n        c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n        b = md5gg(b, c, d, a, x[i], 20, -373897302);\n        a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n        d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n        c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n        b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n        a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n        d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n        c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n        b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n        a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n        d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n        c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n        b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n        a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n        d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n        c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n        b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n        a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n        d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n        c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n        b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n        a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n        d = md5hh(d, a, b, c, x[i], 11, -358537222);\n        c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n        b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n        a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n        d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n        c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n        b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n        a = md5ii(a, b, c, d, x[i], 6, -198630844);\n        d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n        c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n        b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n        a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n        d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n        c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n        b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n        a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n        d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n        c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n        b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n        a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n        d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n        c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n        b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n        a = safeAdd(a, olda);\n        b = safeAdd(b, oldb);\n        c = safeAdd(c, oldc);\n        d = safeAdd(d, oldd);\n    }\n    return Uint32Array.of(a, b, c, d);\n}\nfunction uint8ToUint32(input) {\n    if (input.length === 0) {\n        return new Uint32Array();\n    }\n    const output = new Uint32Array(getOutputLength(input.length * 8)).fill(0);\n    for (let i = 0; i < input.length; i++) {\n        output[i >> 2] |= (input[i] & 0xff) << ((i % 4) * 8);\n    }\n    return output;\n}\nfunction safeAdd(x, y) {\n    const lsw = (x & 0xffff) + (y & 0xffff);\n    const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n    return (msw << 16) | (lsw & 0xffff);\n}\nfunction bitRotateLeft(num, cnt) {\n    return (num << cnt) | (num >>> (32 - cnt));\n}\nfunction md5cmn(q, a, b, x, s, t) {\n    return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n    return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n    return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n    return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n    return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\nexports.default = md5;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = exports.stringToBytes = void 0;\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction stringToBytes(str) {\n    str = unescape(encodeURIComponent(str));\n    const bytes = new Uint8Array(str.length);\n    for (let i = 0; i < str.length; ++i) {\n        bytes[i] = str.charCodeAt(i);\n    }\n    return bytes;\n}\nexports.stringToBytes = stringToBytes;\nexports.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nfunction v35(version, hash, value, namespace, buf, offset) {\n    const valueBytes = typeof value === 'string' ? stringToBytes(value) : value;\n    const namespaceBytes = typeof namespace === 'string' ? (0, parse_js_1.default)(namespace) : namespace;\n    if (typeof namespace === 'string') {\n        namespace = (0, parse_js_1.default)(namespace);\n    }\n    if (namespace?.length !== 16) {\n        throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    }\n    let bytes = new Uint8Array(16 + valueBytes.length);\n    bytes.set(namespaceBytes);\n    bytes.set(valueBytes, namespaceBytes.length);\n    bytes = hash(bytes);\n    bytes[6] = (bytes[6] & 0x0f) | version;\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = bytes[i];\n        }\n        return buf;\n    }\n    return (0, stringify_js_1.unsafeStringify)(bytes);\n}\nexports.default = v35;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = void 0;\nconst md5_js_1 = require(\"./md5.js\");\nconst v35_js_1 = require(\"./v35.js\");\nvar v35_js_2 = require(\"./v35.js\");\nObject.defineProperty(exports, \"DNS\", { enumerable: true, get: function () { return v35_js_2.DNS; } });\nObject.defineProperty(exports, \"URL\", { enumerable: true, get: function () { return v35_js_2.URL; } });\nfunction v3(value, namespace, buf, offset) {\n    return (0, v35_js_1.default)(0x30, md5_js_1.default, value, namespace, buf, offset);\n}\nv3.DNS = v35_js_1.DNS;\nv3.URL = v35_js_1.URL;\nexports.default = v3;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexports.default = { randomUUID };\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst native_js_1 = require(\"./native.js\");\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v4(options, buf, offset) {\n    if (native_js_1.default.randomUUID && !buf && !options) {\n        return native_js_1.default.randomUUID();\n    }\n    options = options || {};\n    const rnds = options.random ?? options.rng?.() ?? (0, rng_js_1.default)();\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = rnds[i];\n        }\n        return buf;\n    }\n    return (0, stringify_js_1.unsafeStringify)(rnds);\n}\nexports.default = v4;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction f(s, x, y, z) {\n    switch (s) {\n        case 0:\n            return (x & y) ^ (~x & z);\n        case 1:\n            return x ^ y ^ z;\n        case 2:\n            return (x & y) ^ (x & z) ^ (y & z);\n        case 3:\n            return x ^ y ^ z;\n    }\n}\nfunction ROTL(x, n) {\n    return (x << n) | (x >>> (32 - n));\n}\nfunction sha1(bytes) {\n    const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n    const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n    const newBytes = new Uint8Array(bytes.length + 1);\n    newBytes.set(bytes);\n    newBytes[bytes.length] = 0x80;\n    bytes = newBytes;\n    const l = bytes.length / 4 + 2;\n    const N = Math.ceil(l / 16);\n    const M = new Array(N);\n    for (let i = 0; i < N; ++i) {\n        const arr = new Uint32Array(16);\n        for (let j = 0; j < 16; ++j) {\n            arr[j] =\n                (bytes[i * 64 + j * 4] << 24) |\n                    (bytes[i * 64 + j * 4 + 1] << 16) |\n                    (bytes[i * 64 + j * 4 + 2] << 8) |\n                    bytes[i * 64 + j * 4 + 3];\n        }\n        M[i] = arr;\n    }\n    M[N - 1][14] = ((bytes.length - 1) * 8) / Math.pow(2, 32);\n    M[N - 1][14] = Math.floor(M[N - 1][14]);\n    M[N - 1][15] = ((bytes.length - 1) * 8) & 0xffffffff;\n    for (let i = 0; i < N; ++i) {\n        const W = new Uint32Array(80);\n        for (let t = 0; t < 16; ++t) {\n            W[t] = M[i][t];\n        }\n        for (let t = 16; t < 80; ++t) {\n            W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n        }\n        let a = H[0];\n        let b = H[1];\n        let c = H[2];\n        let d = H[3];\n        let e = H[4];\n        for (let t = 0; t < 80; ++t) {\n            const s = Math.floor(t / 20);\n            const T = (ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t]) >>> 0;\n            e = d;\n            d = c;\n            c = ROTL(b, 30) >>> 0;\n            b = a;\n            a = T;\n        }\n        H[0] = (H[0] + a) >>> 0;\n        H[1] = (H[1] + b) >>> 0;\n        H[2] = (H[2] + c) >>> 0;\n        H[3] = (H[3] + d) >>> 0;\n        H[4] = (H[4] + e) >>> 0;\n    }\n    return Uint8Array.of(H[0] >> 24, H[0] >> 16, H[0] >> 8, H[0], H[1] >> 24, H[1] >> 16, H[1] >> 8, H[1], H[2] >> 24, H[2] >> 16, H[2] >> 8, H[2], H[3] >> 24, H[3] >> 16, H[3] >> 8, H[3], H[4] >> 24, H[4] >> 16, H[4] >> 8, H[4]);\n}\nexports.default = sha1;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = void 0;\nconst sha1_js_1 = require(\"./sha1.js\");\nconst v35_js_1 = require(\"./v35.js\");\nvar v35_js_2 = require(\"./v35.js\");\nObject.defineProperty(exports, \"DNS\", { enumerable: true, get: function () { return v35_js_2.DNS; } });\nObject.defineProperty(exports, \"URL\", { enumerable: true, get: function () { return v35_js_2.URL; } });\nfunction v5(value, namespace, buf, offset) {\n    return (0, v35_js_1.default)(0x50, sha1_js_1.default, value, namespace, buf, offset);\n}\nv5.DNS = v35_js_1.DNS;\nv5.URL = v35_js_1.URL;\nexports.default = v5;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stringify_js_1 = require(\"./stringify.js\");\nconst v1_js_1 = require(\"./v1.js\");\nconst v1ToV6_js_1 = require(\"./v1ToV6.js\");\nfunction v6(options, buf, offset) {\n    options ??= {};\n    offset ??= 0;\n    let bytes = (0, v1_js_1.default)({ ...options, _v6: true }, new Uint8Array(16));\n    bytes = (0, v1ToV6_js_1.default)(bytes);\n    if (buf) {\n        for (let i = 0; i < 16; i++) {\n            buf[offset + i] = bytes[i];\n        }\n        return buf;\n    }\n    return (0, stringify_js_1.unsafeStringify)(bytes);\n}\nexports.default = v6;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v6ToV1(uuid) {\n    const v6Bytes = typeof uuid === 'string' ? (0, parse_js_1.default)(uuid) : uuid;\n    const v1Bytes = _v6ToV1(v6Bytes);\n    return typeof uuid === 'string' ? (0, stringify_js_1.unsafeStringify)(v1Bytes) : v1Bytes;\n}\nexports.default = v6ToV1;\nfunction _v6ToV1(v6Bytes) {\n    return Uint8Array.of(((v6Bytes[3] & 0x0f) << 4) | ((v6Bytes[4] >> 4) & 0x0f), ((v6Bytes[4] & 0x0f) << 4) | ((v6Bytes[5] & 0xf0) >> 4), ((v6Bytes[5] & 0x0f) << 4) | (v6Bytes[6] & 0x0f), v6Bytes[7], ((v6Bytes[1] & 0x0f) << 4) | ((v6Bytes[2] & 0xf0) >> 4), ((v6Bytes[2] & 0x0f) << 4) | ((v6Bytes[3] & 0xf0) >> 4), 0x10 | ((v6Bytes[0] & 0xf0) >> 4), ((v6Bytes[0] & 0x0f) << 4) | ((v6Bytes[1] & 0xf0) >> 4), v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.updateV7State = void 0;\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nconst _state = {};\nfunction v7(options, buf, offset) {\n    let bytes;\n    if (options) {\n        bytes = v7Bytes(options.random ?? options.rng?.() ?? (0, rng_js_1.default)(), options.msecs, options.seq, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = (0, rng_js_1.default)();\n        updateV7State(_state, now, rnds);\n        bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);\n    }\n    return buf ?? (0, stringify_js_1.unsafeStringify)(bytes);\n}\nfunction updateV7State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.seq ??= 0;\n    if (now > state.msecs) {\n        state.seq = (rnds[6] << 23) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n        state.msecs = now;\n    }\n    else {\n        state.seq = (state.seq + 1) | 0;\n        if (state.seq === 0) {\n            state.msecs++;\n        }\n    }\n    return state;\n}\nexports.updateV7State = updateV7State;\nfunction v7Bytes(rnds, msecs, seq, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    seq ??= ((rnds[6] * 0x7f) << 24) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n    buf[offset++] = (msecs / 0x10000000000) & 0xff;\n    buf[offset++] = (msecs / 0x100000000) & 0xff;\n    buf[offset++] = (msecs / 0x1000000) & 0xff;\n    buf[offset++] = (msecs / 0x10000) & 0xff;\n    buf[offset++] = (msecs / 0x100) & 0xff;\n    buf[offset++] = msecs & 0xff;\n    buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);\n    buf[offset++] = (seq >>> 20) & 0xff;\n    buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);\n    buf[offset++] = (seq >>> 6) & 0xff;\n    buf[offset++] = ((seq << 2) & 0xff) | (rnds[10] & 0x03);\n    buf[offset++] = rnds[11];\n    buf[offset++] = rnds[12];\n    buf[offset++] = rnds[13];\n    buf[offset++] = rnds[14];\n    buf[offset++] = rnds[15];\n    return buf;\n}\nexports.default = v7;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_js_1 = require(\"./validate.js\");\nfunction version(uuid) {\n    if (!(0, validate_js_1.default)(uuid)) {\n        throw TypeError('Invalid UUID');\n    }\n    return parseInt(uuid.slice(14, 15), 16);\n}\nexports.default = version;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = exports.validate = exports.v7 = exports.v6ToV1 = exports.v6 = exports.v5 = exports.v4 = exports.v3 = exports.v1ToV6 = exports.v1 = exports.stringify = exports.parse = exports.NIL = exports.MAX = void 0;\nvar max_js_1 = require(\"./max.js\");\nObject.defineProperty(exports, \"MAX\", { enumerable: true, get: function () { return max_js_1.default; } });\nvar nil_js_1 = require(\"./nil.js\");\nObject.defineProperty(exports, \"NIL\", { enumerable: true, get: function () { return nil_js_1.default; } });\nvar parse_js_1 = require(\"./parse.js\");\nObject.defineProperty(exports, \"parse\", { enumerable: true, get: function () { return parse_js_1.default; } });\nvar stringify_js_1 = require(\"./stringify.js\");\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return stringify_js_1.default; } });\nvar v1_js_1 = require(\"./v1.js\");\nObject.defineProperty(exports, \"v1\", { enumerable: true, get: function () { return v1_js_1.default; } });\nvar v1ToV6_js_1 = require(\"./v1ToV6.js\");\nObject.defineProperty(exports, \"v1ToV6\", { enumerable: true, get: function () { return v1ToV6_js_1.default; } });\nvar v3_js_1 = require(\"./v3.js\");\nObject.defineProperty(exports, \"v3\", { enumerable: true, get: function () { return v3_js_1.default; } });\nvar v4_js_1 = require(\"./v4.js\");\nObject.defineProperty(exports, \"v4\", { enumerable: true, get: function () { return v4_js_1.default; } });\nvar v5_js_1 = require(\"./v5.js\");\nObject.defineProperty(exports, \"v5\", { enumerable: true, get: function () { return v5_js_1.default; } });\nvar v6_js_1 = require(\"./v6.js\");\nObject.defineProperty(exports, \"v6\", { enumerable: true, get: function () { return v6_js_1.default; } });\nvar v6ToV1_js_1 = require(\"./v6ToV1.js\");\nObject.defineProperty(exports, \"v6ToV1\", { enumerable: true, get: function () { return v6ToV1_js_1.default; } });\nvar v7_js_1 = require(\"./v7.js\");\nObject.defineProperty(exports, \"v7\", { enumerable: true, get: function () { return v7_js_1.default; } });\nvar validate_js_1 = require(\"./validate.js\");\nObject.defineProperty(exports, \"validate\", { enumerable: true, get: function () { return validate_js_1.default; } });\nvar version_js_1 = require(\"./version.js\");\nObject.defineProperty(exports, \"version\", { enumerable: true, get: function () { return version_js_1.default; } });\n", "/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)\n * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)\n * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.\n *\n * Version: 1.3.8\n *\n */\n(function($) {\n\n  $.fn.extend({\n    slimScroll: function(options) {\n\n      var defaults = {\n\n        // width in pixels of the visible scroll area\n        width : 'auto',\n\n        // height in pixels of the visible scroll area\n        height : '250px',\n\n        // width in pixels of the scrollbar and rail\n        size : '7px',\n\n        // scrollbar color, accepts any hex/color value\n        color: '#000',\n\n        // scrollbar position - left/right\n        position : 'right',\n\n        // distance in pixels between the side edge and the scrollbar\n        distance : '1px',\n\n        // default scroll position on load - top / bottom / $('selector')\n        start : 'top',\n\n        // sets scrollbar opacity\n        opacity : .4,\n\n        // enables always-on mode for the scrollbar\n        alwaysVisible : false,\n\n        // check if we should hide the scrollbar when user is hovering over\n        disableFadeOut : false,\n\n        // sets visibility of the rail\n        railVisible : false,\n\n        // sets rail color\n        railColor : '#333',\n\n        // sets rail opacity\n        railOpacity : .2,\n\n        // whether  we should use jQuery UI Draggable to enable bar dragging\n        railDraggable : true,\n\n        // defautlt CSS class of the slimscroll rail\n        railClass : 'slimScrollRail',\n\n        // defautlt CSS class of the slimscroll bar\n        barClass : 'slimScrollBar',\n\n        // defautlt CSS class of the slimscroll wrapper\n        wrapperClass : 'slimScrollDiv',\n\n        // check if mousewheel should scroll the window if we reach top/bottom\n        allowPageScroll : false,\n\n        // scroll amount applied to each mouse wheel step\n        wheelStep : 20,\n\n        // scroll amount applied when user is using gestures\n        touchScrollStep : 200,\n\n        // sets border radius\n        borderRadius: '7px',\n\n        // sets border radius of the rail\n        railBorderRadius : '7px'\n      };\n\n      var o = $.extend(defaults, options);\n\n      // do it for every element that matches selector\n      this.each(function(){\n\n      var isOverPanel, isOverBar, isDragg, queueHide, touchDif,\n        barHeight, percentScroll, lastScroll,\n        divS = '<div></div>',\n        minBarHeight = 30,\n        releaseScroll = false;\n\n        // used in event handlers and for better minification\n        var me = $(this);\n\n        // ensure we are not binding it again\n        if (me.parent().hasClass(o.wrapperClass))\n        {\n            // start from last bar position\n            var offset = me.scrollTop();\n\n            // find bar and rail\n            bar = me.siblings('.' + o.barClass);\n            rail = me.siblings('.' + o.railClass);\n\n            getBarHeight();\n\n            // check if we should scroll existing instance\n            if ($.isPlainObject(options))\n            {\n              // Pass height: auto to an existing slimscroll object to force a resize after contents have changed\n              if ( 'height' in options && options.height == 'auto' ) {\n                me.parent().css('height', 'auto');\n                me.css('height', 'auto');\n                var height = me.parent().parent().height();\n                me.parent().css('height', height);\n                me.css('height', height);\n              } else if ('height' in options) {\n                var h = options.height;\n                me.parent().css('height', h);\n                me.css('height', h);\n              }\n\n              if ('scrollTo' in options)\n              {\n                // jump to a static point\n                offset = parseInt(o.scrollTo);\n              }\n              else if ('scrollBy' in options)\n              {\n                // jump by value pixels\n                offset += parseInt(o.scrollBy);\n              }\n              else if ('destroy' in options)\n              {\n                // remove slimscroll elements\n                bar.remove();\n                rail.remove();\n                me.unwrap();\n                return;\n              }\n\n              // scroll content by the given offset\n              scrollContent(offset, false, true);\n            }\n\n            return;\n        }\n        else if ($.isPlainObject(options))\n        {\n            if ('destroy' in options)\n            {\n            \treturn;\n            }\n        }\n\n        // optionally set height to the parent's height\n        o.height = (o.height == 'auto') ? me.parent().height() : o.height;\n\n        // wrap content\n        var wrapper = $(divS)\n          .addClass(o.wrapperClass)\n          .css({\n            position: 'relative',\n            overflow: 'hidden',\n            width: o.width,\n            height: o.height\n          });\n\n        // update style for the div\n        me.css({\n          overflow: 'hidden',\n          width: o.width,\n          height: o.height\n        });\n\n        // create scrollbar rail\n        var rail = $(divS)\n          .addClass(o.railClass)\n          .css({\n            width: o.size,\n            height: '100%',\n            position: 'absolute',\n            top: 0,\n            display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none',\n            'border-radius': o.railBorderRadius,\n            background: o.railColor,\n            opacity: o.railOpacity,\n            zIndex: 90\n          });\n\n        // create scrollbar\n        var bar = $(divS)\n          .addClass(o.barClass)\n          .css({\n            background: o.color,\n            width: o.size,\n            position: 'absolute',\n            top: 0,\n            opacity: o.opacity,\n            display: o.alwaysVisible ? 'block' : 'none',\n            'border-radius' : o.borderRadius,\n            BorderRadius: o.borderRadius,\n            MozBorderRadius: o.borderRadius,\n            WebkitBorderRadius: o.borderRadius,\n            zIndex: 99\n          });\n\n        // set position\n        var posCss = (o.position == 'right') ? { right: o.distance } : { left: o.distance };\n        rail.css(posCss);\n        bar.css(posCss);\n\n        // wrap it\n        me.wrap(wrapper);\n\n        // append to parent div\n        me.parent().append(bar);\n        me.parent().append(rail);\n\n        // make it draggable and no longer dependent on the jqueryUI\n        if (o.railDraggable){\n          bar.bind(\"mousedown\", function(e) {\n            var $doc = $(document);\n            isDragg = true;\n            t = parseFloat(bar.css('top'));\n            pageY = e.pageY;\n\n            $doc.bind(\"mousemove.slimscroll\", function(e){\n              currTop = t + e.pageY - pageY;\n              bar.css('top', currTop);\n              scrollContent(0, bar.position().top, false);// scroll content\n            });\n\n            $doc.bind(\"mouseup.slimscroll\", function(e) {\n              isDragg = false;hideBar();\n              $doc.unbind('.slimscroll');\n            });\n            return false;\n          }).bind(\"selectstart.slimscroll\", function(e){\n            e.stopPropagation();\n            e.preventDefault();\n            return false;\n          });\n        }\n\n        // on rail over\n        rail.hover(function(){\n          showBar();\n        }, function(){\n          hideBar();\n        });\n\n        // on bar over\n        bar.hover(function(){\n          isOverBar = true;\n        }, function(){\n          isOverBar = false;\n        });\n\n        // show on parent mouseover\n        me.hover(function(){\n          isOverPanel = true;\n          showBar();\n          hideBar();\n        }, function(){\n          isOverPanel = false;\n          hideBar();\n        });\n\n        // support for mobile\n        me.bind('touchstart', function(e,b){\n          if (e.originalEvent.touches.length)\n          {\n            // record where touch started\n            touchDif = e.originalEvent.touches[0].pageY;\n          }\n        });\n\n        me.bind('touchmove', function(e){\n          // prevent scrolling the page if necessary\n          if(!releaseScroll)\n          {\n  \t\t      e.originalEvent.preventDefault();\n\t\t      }\n          if (e.originalEvent.touches.length)\n          {\n            // see how far user swiped\n            var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep;\n            // scroll content\n            scrollContent(diff, true);\n            touchDif = e.originalEvent.touches[0].pageY;\n          }\n        });\n\n        // set up initial height\n        getBarHeight();\n\n        // check start position\n        if (o.start === 'bottom')\n        {\n          // scroll content to bottom\n          bar.css({ top: me.outerHeight() - bar.outerHeight() });\n          scrollContent(0, true);\n        }\n        else if (o.start !== 'top')\n        {\n          // assume jQuery selector\n          scrollContent($(o.start).position().top, null, true);\n\n          // make sure bar stays hidden\n          if (!o.alwaysVisible) { bar.hide(); }\n        }\n\n        // attach scroll events\n        attachWheel(this);\n\n        function _onWheel(e)\n        {\n          // use mouse wheel only when mouse is over\n          if (!isOverPanel) { return; }\n\n          var e = e || window.event;\n\n          var delta = 0;\n          if (e.wheelDelta) { delta = -e.wheelDelta/120; }\n          if (e.detail) { delta = e.detail / 3; }\n\n          var target = e.target || e.srcTarget || e.srcElement;\n          if ($(target).closest('.' + o.wrapperClass).is(me.parent())) {\n            // scroll content\n            scrollContent(delta, true);\n          }\n\n          // stop window scroll\n          if (e.preventDefault && !releaseScroll) { e.preventDefault(); }\n          if (!releaseScroll) { e.returnValue = false; }\n        }\n\n        function scrollContent(y, isWheel, isJump)\n        {\n          releaseScroll = false;\n          var delta = y;\n          var maxTop = me.outerHeight() - bar.outerHeight();\n\n          if (isWheel)\n          {\n            // move bar with mouse wheel\n            delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight();\n\n            // move bar, make sure it doesn't go out\n            delta = Math.min(Math.max(delta, 0), maxTop);\n\n            // if scrolling down, make sure a fractional change to the\n            // scroll position isn't rounded away when the scrollbar's CSS is set\n            // this flooring of delta would happened automatically when\n            // bar.css is set below, but we floor here for clarity\n            delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta);\n\n            // scroll the scrollbar\n            bar.css({ top: delta + 'px' });\n          }\n\n          // calculate actual scroll amount\n          percentScroll = parseInt(bar.css('top')) / (me.outerHeight() - bar.outerHeight());\n          delta = percentScroll * (me[0].scrollHeight - me.outerHeight());\n\n          if (isJump)\n          {\n            delta = y;\n            var offsetTop = delta / me[0].scrollHeight * me.outerHeight();\n            offsetTop = Math.min(Math.max(offsetTop, 0), maxTop);\n            bar.css({ top: offsetTop + 'px' });\n          }\n\n          // scroll content\n          me.scrollTop(delta);\n\n          // fire scrolling event\n          me.trigger('slimscrolling', ~~delta);\n\n          // ensure bar is visible\n          showBar();\n\n          // trigger hide when scroll is stopped\n          hideBar();\n        }\n\n        function attachWheel(target)\n        {\n          if (window.addEventListener)\n          {\n            target.addEventListener('DOMMouseScroll', _onWheel, false );\n            target.addEventListener('mousewheel', _onWheel, false );\n          }\n          else\n          {\n            document.attachEvent(\"onmousewheel\", _onWheel)\n          }\n        }\n\n        function getBarHeight()\n        {\n          // calculate scrollbar height and make sure it is not too small\n          barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight);\n          bar.css({ height: barHeight + 'px' });\n\n          // hide scrollbar if content is not long enough\n          var display = barHeight == me.outerHeight() ? 'none' : 'block';\n          bar.css({ display: display });\n        }\n\n        function showBar()\n        {\n          // recalculate bar height\n          getBarHeight();\n          clearTimeout(queueHide);\n\n          // when bar reached top or bottom\n          if (percentScroll == ~~percentScroll)\n          {\n            //release wheel\n            releaseScroll = o.allowPageScroll;\n\n            // publish approporiate event\n            if (lastScroll != percentScroll)\n            {\n                var msg = (~~percentScroll == 0) ? 'top' : 'bottom';\n                me.trigger('slimscroll', msg);\n            }\n          }\n          else\n          {\n            releaseScroll = false;\n          }\n          lastScroll = percentScroll;\n\n          // show only when required\n          if(barHeight >= me.outerHeight()) {\n            //allow window scroll\n            releaseScroll = true;\n            return;\n          }\n          bar.stop(true,true).fadeIn('fast');\n          if (o.railVisible) { rail.stop(true,true).fadeIn('fast'); }\n        }\n\n        function hideBar()\n        {\n          // only hide when options allow it\n          if (!o.alwaysVisible)\n          {\n            queueHide = setTimeout(function(){\n              if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg)\n              {\n                bar.fadeOut('slow');\n                rail.fadeOut('slow');\n              }\n            }, 1000);\n          }\n        }\n\n      });\n\n      // maintain chainability\n      return this;\n    }\n  });\n\n  $.fn.extend({\n    slimscroll: $.fn.slimScroll\n  });\n\n})(jQuery);\n", "/*! jQuery UI - v1.13.2 - 2022-08-16\n* http://jqueryui.com\n* Includes: widget.js, position.js, jquery-patch.js, keycode.js, scroll-parent.js, unique-id.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n( function( factory ) {\n\t\"use strict\";\n\t\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.13.2\";\n\n\n/*!\n * jQuery UI Widget 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n\nvar widgetUuid = 0;\nvar widgetHasOwnProperty = Array.prototype.hasOwnProperty;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = $.cleanData || ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\n\t\t\t// Only trigger remove when necessary to save time\n\t\t\tevents = $._data( elem, \"events\" );\n\t\t\tif ( events && events.remove ) {\n\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = $.widget || function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( Array.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this || !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = $.Widget || function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction bindRemoveEvent() {\n\t\t\tvar nodesToBind = [];\n\n\t\t\toptions.element.each( function( _, element ) {\n\t\t\t\tvar isTracked = $.map( that.classesElementLookup, function( elements ) {\n\t\t\t\t\treturn elements;\n\t\t\t\t} )\n\t\t\t\t\t.some( function( elements ) {\n\t\t\t\t\t\treturn elements.is( element );\n\t\t\t\t\t} );\n\n\t\t\t\tif ( !isTracked ) {\n\t\t\t\t\tnodesToBind.push( element );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthat._on( $( nodesToBind ), {\n\t\t\t\tremove: \"_untrackClassesElement\"\n\t\t\t} );\n\t\t}\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tbindRemoveEvent();\n\t\t\t\t\tcurrent = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\n\t\tthis._off( $( event.target ) );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( typeof callback === \"function\" &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t} else if ( options === true ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: http://api.jqueryui.com/position/\n//>>demos: http://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = $.position || {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div style=\" +\n\t\t\t\t\"'display:block;position:absolute;width:200px;height:200px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:300px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisElemWindow = isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isElemWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isElemWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\n\t\t// Make sure string options are treated as CSS selectors\n\t\ttarget = typeof options.of === \"string\" ?\n\t\t\t$( document ).find( options.of ) :\n\t\t\t$( options.of ),\n\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI Support for jQuery core 1.8.x and newer 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n */\n\n//>>label: jQuery 1.8+ Support\n//>>group: Core\n//>>description: Support version 1.8.x and newer of jQuery core\n\n\n// Support: jQuery 1.9.x or older\n// $.expr[ \":\" ] is deprecated.\nif ( !$.expr.pseudos ) {\n\t$.expr.pseudos = $.expr[ \":\" ];\n}\n\n// Support: jQuery 1.11.x or older\n// $.unique has been renamed to $.uniqueSort\nif ( !$.uniqueSort ) {\n\t$.uniqueSort = $.unique;\n}\n\n// Support: jQuery 2.2.x or older.\n// This method has been defined in jQuery 3.0.0.\n// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js\nif ( !$.escapeSelector ) {\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tvar fcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t};\n\n\t$.escapeSelector = function( sel ) {\n\t\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n\t};\n}\n\n// Support: jQuery 3.4.x or older\n// These methods have been defined in jQuery 3.5.0.\nif ( !$.fn.even || !$.fn.odd ) {\n\t$.fn.extend( {\n\t\teven: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 0;\n\t\t\t} );\n\t\t},\n\t\todd: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 1;\n\t\t\t} );\n\t\t}\n\t} );\n}\n\n;\n/*!\n * jQuery UI Keycode 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Unique ID 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: http://api.jqueryui.com/uniqueId/\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n\n\n} );", "/*!\n * jquery.fancytree.js\n * Tree view control with support for lazy loading and much more.\n * https://github.com/mar10/fancytree/\n *\n * Copyright (c) 2008-2023, Martin Wendt (https://wwWendt.de)\n * Released under the MIT license\n * https://github.com/mar10/fancytree/wiki/LicenseInfo\n *\n * @version 2.38.3\n * @date 2023-02-01T20:52:50Z\n */\n\n/** Core Fancytree module.\n */\n\n// UMD wrapper for the Fancytree core module\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([\"jquery\", \"./jquery.fancytree.ui-deps\"], factory);\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\t// Node/CommonJS\n\t\trequire(\"./jquery.fancytree.ui-deps\");\n\t\tmodule.exports = factory(require(\"jquery\"));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n})(function ($) {\n\t\"use strict\";\n\n\t// prevent duplicate loading\n\tif ($.ui && $.ui.fancytree) {\n\t\t$.ui.fancytree.warn(\"Fancytree: ignored duplicate include\");\n\t\treturn;\n\t}\n\n\t/******************************************************************************\n\t * Private functions and variables\n\t */\n\n\tvar i,\n\t\tattr,\n\t\tFT = null, // initialized below\n\t\tTEST_IMG = new RegExp(/\\.|\\//), // strings are considered image urls if they contain '.' or '/'\n\t\tREX_HTML = /[&<>\"'/]/g, // Escape those characters\n\t\tREX_TOOLTIP = /[<>\"'/]/g, // Don't escape `&` in tooltips\n\t\tRECURSIVE_REQUEST_ERROR = \"$recursive_request\",\n\t\tINVALID_REQUEST_TARGET_ERROR = \"$request_target_invalid\",\n\t\tENTITY_MAP = {\n\t\t\t\"&\": \"&amp;\",\n\t\t\t\"<\": \"&lt;\",\n\t\t\t\">\": \"&gt;\",\n\t\t\t'\"': \"&quot;\",\n\t\t\t\"'\": \"&#39;\",\n\t\t\t\"/\": \"&#x2F;\",\n\t\t},\n\t\tIGNORE_KEYCODES = { 16: true, 17: true, 18: true },\n\t\tSPECIAL_KEYCODES = {\n\t\t\t8: \"backspace\",\n\t\t\t9: \"tab\",\n\t\t\t10: \"return\",\n\t\t\t13: \"return\",\n\t\t\t// 16: null, 17: null, 18: null,  // ignore shift, ctrl, alt\n\t\t\t19: \"pause\",\n\t\t\t20: \"capslock\",\n\t\t\t27: \"esc\",\n\t\t\t32: \"space\",\n\t\t\t33: \"pageup\",\n\t\t\t34: \"pagedown\",\n\t\t\t35: \"end\",\n\t\t\t36: \"home\",\n\t\t\t37: \"left\",\n\t\t\t38: \"up\",\n\t\t\t39: \"right\",\n\t\t\t40: \"down\",\n\t\t\t45: \"insert\",\n\t\t\t46: \"del\",\n\t\t\t59: \";\",\n\t\t\t61: \"=\",\n\t\t\t// 91: null, 93: null,  // ignore left and right meta\n\t\t\t96: \"0\",\n\t\t\t97: \"1\",\n\t\t\t98: \"2\",\n\t\t\t99: \"3\",\n\t\t\t100: \"4\",\n\t\t\t101: \"5\",\n\t\t\t102: \"6\",\n\t\t\t103: \"7\",\n\t\t\t104: \"8\",\n\t\t\t105: \"9\",\n\t\t\t106: \"*\",\n\t\t\t107: \"+\",\n\t\t\t109: \"-\",\n\t\t\t110: \".\",\n\t\t\t111: \"/\",\n\t\t\t112: \"f1\",\n\t\t\t113: \"f2\",\n\t\t\t114: \"f3\",\n\t\t\t115: \"f4\",\n\t\t\t116: \"f5\",\n\t\t\t117: \"f6\",\n\t\t\t118: \"f7\",\n\t\t\t119: \"f8\",\n\t\t\t120: \"f9\",\n\t\t\t121: \"f10\",\n\t\t\t122: \"f11\",\n\t\t\t123: \"f12\",\n\t\t\t144: \"numlock\",\n\t\t\t145: \"scroll\",\n\t\t\t173: \"-\",\n\t\t\t186: \";\",\n\t\t\t187: \"=\",\n\t\t\t188: \",\",\n\t\t\t189: \"-\",\n\t\t\t190: \".\",\n\t\t\t191: \"/\",\n\t\t\t192: \"`\",\n\t\t\t219: \"[\",\n\t\t\t220: \"\\\\\",\n\t\t\t221: \"]\",\n\t\t\t222: \"'\",\n\t\t},\n\t\tMODIFIERS = {\n\t\t\t16: \"shift\",\n\t\t\t17: \"ctrl\",\n\t\t\t18: \"alt\",\n\t\t\t91: \"meta\",\n\t\t\t93: \"meta\",\n\t\t},\n\t\tMOUSE_BUTTONS = { 0: \"\", 1: \"left\", 2: \"middle\", 3: \"right\" },\n\t\t// Boolean attributes that can be set with equivalent class names in the LI tags\n\t\t// Note: v2.23: checkbox and hideCheckbox are *not* in this list\n\t\tCLASS_ATTRS =\n\t\t\t\"active expanded focus folder lazy radiogroup selected unselectable unselectableIgnore\".split(\n\t\t\t\t\" \"\n\t\t\t),\n\t\tCLASS_ATTR_MAP = {},\n\t\t// Top-level Fancytree attributes, that can be set by dict\n\t\tTREE_ATTRS = \"columns types\".split(\" \"),\n\t\t// TREE_ATTR_MAP = {},\n\t\t// Top-level FancytreeNode attributes, that can be set by dict\n\t\tNODE_ATTRS =\n\t\t\t\"checkbox expanded extraClasses folder icon iconTooltip key lazy partsel radiogroup refKey selected statusNodeType title tooltip type unselectable unselectableIgnore unselectableStatus\".split(\n\t\t\t\t\" \"\n\t\t\t),\n\t\tNODE_ATTR_MAP = {},\n\t\t// Mapping of lowercase -> real name (because HTML5 data-... attribute only supports lowercase)\n\t\tNODE_ATTR_LOWERCASE_MAP = {},\n\t\t// Attribute names that should NOT be added to node.data\n\t\tNONE_NODE_DATA_MAP = {\n\t\t\tactive: true,\n\t\t\tchildren: true,\n\t\t\tdata: true,\n\t\t\tfocus: true,\n\t\t};\n\n\tfor (i = 0; i < CLASS_ATTRS.length; i++) {\n\t\tCLASS_ATTR_MAP[CLASS_ATTRS[i]] = true;\n\t}\n\tfor (i = 0; i < NODE_ATTRS.length; i++) {\n\t\tattr = NODE_ATTRS[i];\n\t\tNODE_ATTR_MAP[attr] = true;\n\t\tif (attr !== attr.toLowerCase()) {\n\t\t\tNODE_ATTR_LOWERCASE_MAP[attr.toLowerCase()] = attr;\n\t\t}\n\t}\n\t// for(i=0; i<TREE_ATTRS.length; i++) {\n\t// \tTREE_ATTR_MAP[TREE_ATTRS[i]] = true;\n\t// }\n\n\tfunction _assert(cond, msg) {\n\t\t// TODO: see qunit.js extractStacktrace()\n\t\tif (!cond) {\n\t\t\tmsg = msg ? \": \" + msg : \"\";\n\t\t\tmsg = \"Fancytree assertion failed\" + msg;\n\n\t\t\t// consoleApply(\"assert\", [!!cond, msg]);\n\n\t\t\t// #1041: Raised exceptions may not be visible in the browser\n\t\t\t// console if inside promise chains, so we also print directly:\n\t\t\t$.ui.fancytree.error(msg);\n\n\t\t\t// Throw exception:\n\t\t\t$.error(msg);\n\t\t}\n\t}\n\n\tfunction _hasProp(object, property) {\n\t\treturn Object.prototype.hasOwnProperty.call(object, property);\n\t}\n\n\t/* Replacement for the deprecated `jQuery.isFunction()`. */\n\tfunction _isFunction(obj) {\n\t\treturn typeof obj === \"function\";\n\t}\n\n\t/* Replacement for the deprecated `jQuery.trim()`. */\n\tfunction _trim(text) {\n\t\treturn text == null ? \"\" : text.trim();\n\t}\n\n\t/* Replacement for the deprecated `jQuery.isArray()`. */\n\tvar _isArray = Array.isArray;\n\n\t_assert($.ui, \"Fancytree requires jQuery UI (http://jqueryui.com)\");\n\n\tfunction consoleApply(method, args) {\n\t\tvar i,\n\t\t\ts,\n\t\t\tfn = window.console ? window.console[method] : null;\n\n\t\tif (fn) {\n\t\t\ttry {\n\t\t\t\tfn.apply(window.console, args);\n\t\t\t} catch (e) {\n\t\t\t\t// IE 8?\n\t\t\t\ts = \"\";\n\t\t\t\tfor (i = 0; i < args.length; i++) {\n\t\t\t\t\ts += args[i];\n\t\t\t\t}\n\t\t\t\tfn(s);\n\t\t\t}\n\t\t}\n\t}\n\n\t/* support: IE8 Polyfil for Date.now() */\n\tif (!Date.now) {\n\t\tDate.now = function now() {\n\t\t\treturn new Date().getTime();\n\t\t};\n\t}\n\n\t/*Return true if x is a FancytreeNode.*/\n\tfunction _isNode(x) {\n\t\treturn !!(x.tree && x.statusNodeType !== undefined);\n\t}\n\n\t/** Return true if dotted version string is equal or higher than requested version.\n\t *\n\t * See http://jsfiddle.net/mar10/FjSAN/\n\t */\n\tfunction isVersionAtLeast(dottedVersion, major, minor, patch) {\n\t\tvar i,\n\t\t\tv,\n\t\t\tt,\n\t\t\tverParts = $.map(_trim(dottedVersion).split(\".\"), function (e) {\n\t\t\t\treturn parseInt(e, 10);\n\t\t\t}),\n\t\t\ttestParts = $.map(\n\t\t\t\tArray.prototype.slice.call(arguments, 1),\n\t\t\t\tfunction (e) {\n\t\t\t\t\treturn parseInt(e, 10);\n\t\t\t\t}\n\t\t\t);\n\n\t\tfor (i = 0; i < testParts.length; i++) {\n\t\t\tv = verParts[i] || 0;\n\t\t\tt = testParts[i] || 0;\n\t\t\tif (v !== t) {\n\t\t\t\treturn v > t;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Deep-merge a list of objects (but replace array-type options).\n\t *\n\t * jQuery's $.extend(true, ...) method does a deep merge, that also merges Arrays.\n\t * This variant is used to merge extension defaults with user options, and should\n\t * merge objects, but override arrays (for example the `triggerStart: [...]` option\n\t * of ext-edit). Also `null` values are copied over and not skipped.\n\t *\n\t * See issue #876\n\t *\n\t * Example:\n\t * _simpleDeepMerge({}, o1, o2);\n\t */\n\tfunction _simpleDeepMerge() {\n\t\tvar options,\n\t\t\tname,\n\t\t\tsrc,\n\t\t\tcopy,\n\t\t\tclone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length;\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !_isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\t\tif (i === length) {\n\t\t\tthrow Error(\"need at least two args\");\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tif (_hasProp(options, name)) {\n\t\t\t\t\t\tsrc = target[name];\n\t\t\t\t\t\tcopy = options[name];\n\t\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\t\tif (target === copy) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Recurse if we're merging plain objects\n\t\t\t\t\t\t// (NOTE: unlike $.extend, we don't merge arrays, but replace them)\n\t\t\t\t\t\tif (copy && $.isPlainObject(copy)) {\n\t\t\t\t\t\t\tclone = src && $.isPlainObject(src) ? src : {};\n\t\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\t\ttarget[name] = _simpleDeepMerge(clone, copy);\n\t\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Return the modified object\n\t\treturn target;\n\t}\n\n\t/** Return a wrapper that calls sub.methodName() and exposes\n\t *  this             : tree\n\t *  this._local      : tree.ext.EXTNAME\n\t *  this._super      : base.methodName.call()\n\t *  this._superApply : base.methodName.apply()\n\t */\n\tfunction _makeVirtualFunction(methodName, tree, base, extension, extName) {\n\t\t// $.ui.fancytree.debug(\"_makeVirtualFunction\", methodName, tree, base, extension, extName);\n\t\t// if(rexTestSuper && !rexTestSuper.test(func)){\n\t\t//     // extension.methodName() doesn't call _super(), so no wrapper required\n\t\t//     return func;\n\t\t// }\n\t\t// Use an immediate function as closure\n\t\tvar proxy = (function () {\n\t\t\tvar prevFunc = tree[methodName], // org. tree method or prev. proxy\n\t\t\t\tbaseFunc = extension[methodName], //\n\t\t\t\t_local = tree.ext[extName],\n\t\t\t\t_super = function () {\n\t\t\t\t\treturn prevFunc.apply(tree, arguments);\n\t\t\t\t},\n\t\t\t\t_superApply = function (args) {\n\t\t\t\t\treturn prevFunc.apply(tree, args);\n\t\t\t\t};\n\n\t\t\t// Return the wrapper function\n\t\t\treturn function () {\n\t\t\t\tvar prevLocal = tree._local,\n\t\t\t\t\tprevSuper = tree._super,\n\t\t\t\t\tprevSuperApply = tree._superApply;\n\n\t\t\t\ttry {\n\t\t\t\t\ttree._local = _local;\n\t\t\t\t\ttree._super = _super;\n\t\t\t\t\ttree._superApply = _superApply;\n\t\t\t\t\treturn baseFunc.apply(tree, arguments);\n\t\t\t\t} finally {\n\t\t\t\t\ttree._local = prevLocal;\n\t\t\t\t\ttree._super = prevSuper;\n\t\t\t\t\ttree._superApply = prevSuperApply;\n\t\t\t\t}\n\t\t\t};\n\t\t})(); // end of Immediate Function\n\t\treturn proxy;\n\t}\n\n\t/**\n\t * Subclass `base` by creating proxy functions\n\t */\n\tfunction _subclassObject(tree, base, extension, extName) {\n\t\t// $.ui.fancytree.debug(\"_subclassObject\", tree, base, extension, extName);\n\t\tfor (var attrName in extension) {\n\t\t\tif (typeof extension[attrName] === \"function\") {\n\t\t\t\tif (typeof tree[attrName] === \"function\") {\n\t\t\t\t\t// override existing method\n\t\t\t\t\ttree[attrName] = _makeVirtualFunction(\n\t\t\t\t\t\tattrName,\n\t\t\t\t\t\ttree,\n\t\t\t\t\t\tbase,\n\t\t\t\t\t\textension,\n\t\t\t\t\t\textName\n\t\t\t\t\t);\n\t\t\t\t} else if (attrName.charAt(0) === \"_\") {\n\t\t\t\t\t// Create private methods in tree.ext.EXTENSION namespace\n\t\t\t\t\ttree.ext[extName][attrName] = _makeVirtualFunction(\n\t\t\t\t\t\tattrName,\n\t\t\t\t\t\ttree,\n\t\t\t\t\t\tbase,\n\t\t\t\t\t\textension,\n\t\t\t\t\t\textName\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t$.error(\n\t\t\t\t\t\t\"Could not override tree.\" +\n\t\t\t\t\t\t\tattrName +\n\t\t\t\t\t\t\t\". Use prefix '_' to create tree.\" +\n\t\t\t\t\t\t\textName +\n\t\t\t\t\t\t\t\"._\" +\n\t\t\t\t\t\t\tattrName\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Create member variables in tree.ext.EXTENSION namespace\n\t\t\t\tif (attrName !== \"options\") {\n\t\t\t\t\ttree.ext[extName][attrName] = extension[attrName];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction _getResolvedPromise(context, argArray) {\n\t\tif (context === undefined) {\n\t\t\treturn $.Deferred(function () {\n\t\t\t\tthis.resolve();\n\t\t\t}).promise();\n\t\t}\n\t\treturn $.Deferred(function () {\n\t\t\tthis.resolveWith(context, argArray);\n\t\t}).promise();\n\t}\n\n\tfunction _getRejectedPromise(context, argArray) {\n\t\tif (context === undefined) {\n\t\t\treturn $.Deferred(function () {\n\t\t\t\tthis.reject();\n\t\t\t}).promise();\n\t\t}\n\t\treturn $.Deferred(function () {\n\t\t\tthis.rejectWith(context, argArray);\n\t\t}).promise();\n\t}\n\n\tfunction _makeResolveFunc(deferred, context) {\n\t\treturn function () {\n\t\t\tdeferred.resolveWith(context);\n\t\t};\n\t}\n\n\tfunction _getElementDataAsDict($el) {\n\t\t// Evaluate 'data-NAME' attributes with special treatment for 'data-json'.\n\t\tvar d = $.extend({}, $el.data()),\n\t\t\tjson = d.json;\n\n\t\tdelete d.fancytree; // added to container by widget factory (old jQuery UI)\n\t\tdelete d.uiFancytree; // added to container by widget factory\n\n\t\tif (json) {\n\t\t\tdelete d.json;\n\t\t\t// <li data-json='...'> is already returned as object (http://api.jquery.com/data/#data-html5)\n\t\t\td = $.extend(d, json);\n\t\t}\n\t\treturn d;\n\t}\n\n\tfunction _escapeTooltip(s) {\n\t\treturn (\"\" + s).replace(REX_TOOLTIP, function (s) {\n\t\t\treturn ENTITY_MAP[s];\n\t\t});\n\t}\n\n\t// TODO: use currying\n\tfunction _makeNodeTitleMatcher(s) {\n\t\ts = s.toLowerCase();\n\t\treturn function (node) {\n\t\t\treturn node.title.toLowerCase().indexOf(s) >= 0;\n\t\t};\n\t}\n\n\tfunction _makeNodeTitleStartMatcher(s) {\n\t\tvar reMatch = new RegExp(\"^\" + s, \"i\");\n\t\treturn function (node) {\n\t\t\treturn reMatch.test(node.title);\n\t\t};\n\t}\n\n\t/******************************************************************************\n\t * FancytreeNode\n\t */\n\n\t/**\n\t * Creates a new FancytreeNode\n\t *\n\t * @class FancytreeNode\n\t * @classdesc A FancytreeNode represents the hierarchical data model and operations.\n\t *\n\t * @param {FancytreeNode} parent\n\t * @param {NodeData} obj\n\t *\n\t * @property {Fancytree} tree The tree instance\n\t * @property {FancytreeNode} parent The parent node\n\t * @property {string} key Node id (must be unique inside the tree)\n\t * @property {string} title Display name (may contain HTML)\n\t * @property {object} data Contains all extra data that was passed on node creation\n\t * @property {FancytreeNode[] | null | undefined} children Array of child nodes.<br>\n\t *     For lazy nodes, null or undefined means 'not yet loaded'. Use an empty array\n\t *     to define a node that has no children.\n\t * @property {boolean} expanded Use isExpanded(), setExpanded() to access this property.\n\t * @property {string} extraClasses Additional CSS classes, added to the node's `<span>`.<br>\n\t *     Note: use `node.add/remove/toggleClass()` to modify.\n\t * @property {boolean} folder Folder nodes have different default icons and click behavior.<br>\n\t *     Note: Also non-folders may have children.\n\t * @property {string} statusNodeType null for standard nodes. Otherwise type of special system node: 'error', 'loading', 'nodata', or 'paging'.\n\t * @property {boolean} lazy True if this node is loaded on demand, i.e. on first expansion.\n\t * @property {boolean} selected Use isSelected(), setSelected() to access this property.\n\t * @property {string} tooltip Alternative description used as hover popup\n\t * @property {string} iconTooltip Description used as hover popup for icon. @since 2.27\n\t * @property {string} type Node type, used with tree.types map. @since 2.27\n\t */\n\tfunction FancytreeNode(parent, obj) {\n\t\tvar i, l, name, cl;\n\n\t\tthis.parent = parent;\n\t\tthis.tree = parent.tree;\n\t\tthis.ul = null;\n\t\tthis.li = null; // <li id='key' ftnode=this> tag\n\t\tthis.statusNodeType = null; // if this is a temp. node to display the status of its parent\n\t\tthis._isLoading = false; // if this node itself is loading\n\t\tthis._error = null; // {message: '...'} if a load error occurred\n\t\tthis.data = {};\n\n\t\t// TODO: merge this code with node.toDict()\n\t\t// copy attributes from obj object\n\t\tfor (i = 0, l = NODE_ATTRS.length; i < l; i++) {\n\t\t\tname = NODE_ATTRS[i];\n\t\t\tthis[name] = obj[name];\n\t\t}\n\t\t// unselectableIgnore and unselectableStatus imply unselectable\n\t\tif (\n\t\t\tthis.unselectableIgnore != null ||\n\t\t\tthis.unselectableStatus != null\n\t\t) {\n\t\t\tthis.unselectable = true;\n\t\t}\n\t\tif (obj.hideCheckbox) {\n\t\t\t$.error(\n\t\t\t\t\"'hideCheckbox' node option was removed in v2.23.0: use 'checkbox: false'\"\n\t\t\t);\n\t\t}\n\t\t// node.data += obj.data\n\t\tif (obj.data) {\n\t\t\t$.extend(this.data, obj.data);\n\t\t}\n\t\t// Copy all other attributes to this.data.NAME\n\t\tfor (name in obj) {\n\t\t\tif (\n\t\t\t\t!NODE_ATTR_MAP[name] &&\n\t\t\t\t(this.tree.options.copyFunctionsToData ||\n\t\t\t\t\t!_isFunction(obj[name])) &&\n\t\t\t\t!NONE_NODE_DATA_MAP[name]\n\t\t\t) {\n\t\t\t\t// node.data.NAME = obj.NAME\n\t\t\t\tthis.data[name] = obj[name];\n\t\t\t}\n\t\t}\n\n\t\t// Fix missing key\n\t\tif (this.key == null) {\n\t\t\t// test for null OR undefined\n\t\t\tif (this.tree.options.defaultKey) {\n\t\t\t\tthis.key = \"\" + this.tree.options.defaultKey(this);\n\t\t\t\t_assert(this.key, \"defaultKey() must return a unique key\");\n\t\t\t} else {\n\t\t\t\tthis.key = \"_\" + FT._nextNodeKey++;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.key = \"\" + this.key; // Convert to string (#217)\n\t\t}\n\n\t\t// Fix tree.activeNode\n\t\t// TODO: not elegant: we use obj.active as marker to set tree.activeNode\n\t\t// when loading from a dictionary.\n\t\tif (obj.active) {\n\t\t\t_assert(\n\t\t\t\tthis.tree.activeNode === null,\n\t\t\t\t\"only one active node allowed\"\n\t\t\t);\n\t\t\tthis.tree.activeNode = this;\n\t\t}\n\t\tif (obj.selected) {\n\t\t\t// #186\n\t\t\tthis.tree.lastSelectedNode = this;\n\t\t}\n\t\t// TODO: handle obj.focus = true\n\n\t\t// Create child nodes\n\t\tcl = obj.children;\n\t\tif (cl) {\n\t\t\tif (cl.length) {\n\t\t\t\tthis._setChildren(cl);\n\t\t\t} else {\n\t\t\t\t// if an empty array was passed for a lazy node, keep it, in order to mark it 'loaded'\n\t\t\t\tthis.children = this.lazy ? [] : null;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.children = null;\n\t\t}\n\t\t// Add to key/ref map (except for root node)\n\t\t//\tif( parent ) {\n\t\tthis.tree._callHook(\"treeRegisterNode\", this.tree, true, this);\n\t\t//\t}\n\t}\n\n\tFancytreeNode.prototype = /** @lends FancytreeNode# */ {\n\t\t/* Return the direct child FancytreeNode with a given key, index. */\n\t\t_findDirectChild: function (ptr) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tcl = this.children;\n\n\t\t\tif (cl) {\n\t\t\t\tif (typeof ptr === \"string\") {\n\t\t\t\t\tfor (i = 0, l = cl.length; i < l; i++) {\n\t\t\t\t\t\tif (cl[i].key === ptr) {\n\t\t\t\t\t\t\treturn cl[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof ptr === \"number\") {\n\t\t\t\t\treturn this.children[ptr];\n\t\t\t\t} else if (ptr.parent === this) {\n\t\t\t\t\treturn ptr;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t// TODO: activate()\n\t\t// TODO: activateSilently()\n\t\t/* Internal helper called in recursive addChildren sequence.*/\n\t\t_setChildren: function (children) {\n\t\t\t_assert(\n\t\t\t\tchildren && (!this.children || this.children.length === 0),\n\t\t\t\t\"only init supported\"\n\t\t\t);\n\t\t\tthis.children = [];\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tthis.children.push(new FancytreeNode(this, children[i]));\n\t\t\t}\n\t\t\tthis.tree._callHook(\n\t\t\t\t\"treeStructureChanged\",\n\t\t\t\tthis.tree,\n\t\t\t\t\"setChildren\"\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Append (or insert) a list of child nodes.\n\t\t *\n\t\t * @param {NodeData[]} children array of child node definitions (also single child accepted)\n\t\t * @param {FancytreeNode | string | Integer} [insertBefore] child node (or key or index of such).\n\t\t *     If omitted, the new children are appended.\n\t\t * @returns {FancytreeNode} first child added\n\t\t *\n\t\t * @see FancytreeNode#applyPatch\n\t\t */\n\t\taddChildren: function (children, insertBefore) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tpos,\n\t\t\t\torigFirstChild = this.getFirstChild(),\n\t\t\t\torigLastChild = this.getLastChild(),\n\t\t\t\tfirstNode = null,\n\t\t\t\tnodeList = [];\n\n\t\t\tif ($.isPlainObject(children)) {\n\t\t\t\tchildren = [children];\n\t\t\t}\n\t\t\tif (!this.children) {\n\t\t\t\tthis.children = [];\n\t\t\t}\n\t\t\tfor (i = 0, l = children.length; i < l; i++) {\n\t\t\t\tnodeList.push(new FancytreeNode(this, children[i]));\n\t\t\t}\n\t\t\tfirstNode = nodeList[0];\n\t\t\tif (insertBefore == null) {\n\t\t\t\tthis.children = this.children.concat(nodeList);\n\t\t\t} else {\n\t\t\t\t// Returns null if insertBefore is not a direct child:\n\t\t\t\tinsertBefore = this._findDirectChild(insertBefore);\n\t\t\t\tpos = $.inArray(insertBefore, this.children);\n\t\t\t\t_assert(pos >= 0, \"insertBefore must be an existing child\");\n\t\t\t\t// insert nodeList after children[pos]\n\t\t\t\tthis.children.splice.apply(\n\t\t\t\t\tthis.children,\n\t\t\t\t\t[pos, 0].concat(nodeList)\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (origFirstChild && !insertBefore) {\n\t\t\t\t// #708: Fast path -- don't render every child of root, just the new ones!\n\t\t\t\t// #723, #729: but only if it's appended to an existing child list\n\t\t\t\tfor (i = 0, l = nodeList.length; i < l; i++) {\n\t\t\t\t\tnodeList[i].render(); // New nodes were never rendered before\n\t\t\t\t}\n\t\t\t\t// Adjust classes where status may have changed\n\t\t\t\t// Has a first child\n\t\t\t\tif (origFirstChild !== this.getFirstChild()) {\n\t\t\t\t\t// Different first child -- recompute classes\n\t\t\t\t\torigFirstChild.renderStatus();\n\t\t\t\t}\n\t\t\t\tif (origLastChild !== this.getLastChild()) {\n\t\t\t\t\t// Different last child -- recompute classes\n\t\t\t\t\torigLastChild.renderStatus();\n\t\t\t\t}\n\t\t\t} else if (!this.parent || this.parent.ul || this.tr) {\n\t\t\t\t// render if the parent was rendered (or this is a root node)\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t\tif (this.tree.options.selectMode === 3) {\n\t\t\t\tthis.fixSelection3FromEndNodes();\n\t\t\t}\n\t\t\tthis.triggerModifyChild(\n\t\t\t\t\"add\",\n\t\t\t\tnodeList.length === 1 ? nodeList[0] : null\n\t\t\t);\n\t\t\treturn firstNode;\n\t\t},\n\t\t/**\n\t\t * Add class to node's span tag and to .extraClasses.\n\t\t *\n\t\t * @param {string} className class name\n\t\t *\n\t\t * @since 2.17\n\t\t */\n\t\taddClass: function (className) {\n\t\t\treturn this.toggleClass(className, true);\n\t\t},\n\t\t/**\n\t\t * Append or prepend a node, or append a child node.\n\t\t *\n\t\t * This a convenience function that calls addChildren()\n\t\t *\n\t\t * @param {NodeData} node node definition\n\t\t * @param {string} [mode=child] 'before', 'after', 'firstChild', or 'child' ('over' is a synonym for 'child')\n\t\t * @returns {FancytreeNode} new node\n\t\t */\n\t\taddNode: function (node, mode) {\n\t\t\tif (mode === undefined || mode === \"over\") {\n\t\t\t\tmode = \"child\";\n\t\t\t}\n\t\t\tswitch (mode) {\n\t\t\t\tcase \"after\":\n\t\t\t\t\treturn this.getParent().addChildren(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tthis.getNextSibling()\n\t\t\t\t\t);\n\t\t\t\tcase \"before\":\n\t\t\t\t\treturn this.getParent().addChildren(node, this);\n\t\t\t\tcase \"firstChild\":\n\t\t\t\t\t// Insert before the first child if any\n\t\t\t\t\tvar insertBefore = this.children ? this.children[0] : null;\n\t\t\t\t\treturn this.addChildren(node, insertBefore);\n\t\t\t\tcase \"child\":\n\t\t\t\tcase \"over\":\n\t\t\t\t\treturn this.addChildren(node);\n\t\t\t}\n\t\t\t_assert(false, \"Invalid mode: \" + mode);\n\t\t},\n\t\t/**Add child status nodes that indicate 'More...', etc.\n\t\t *\n\t\t * This also maintains the node's `partload` property.\n\t\t * @param {boolean|object} node optional node definition. Pass `false` to remove all paging nodes.\n\t\t * @param {string} [mode='child'] 'child'|firstChild'\n\t\t * @since 2.15\n\t\t */\n\t\taddPagingNode: function (node, mode) {\n\t\t\tvar i, n;\n\n\t\t\tmode = mode || \"child\";\n\t\t\tif (node === false) {\n\t\t\t\tfor (i = this.children.length - 1; i >= 0; i--) {\n\t\t\t\t\tn = this.children[i];\n\t\t\t\t\tif (n.statusNodeType === \"paging\") {\n\t\t\t\t\t\tthis.removeChild(n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.partload = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnode = $.extend(\n\t\t\t\t{\n\t\t\t\t\ttitle: this.tree.options.strings.moreData,\n\t\t\t\t\tstatusNodeType: \"paging\",\n\t\t\t\t\ticon: false,\n\t\t\t\t},\n\t\t\t\tnode\n\t\t\t);\n\t\t\tthis.partload = true;\n\t\t\treturn this.addNode(node, mode);\n\t\t},\n\t\t/**\n\t\t * Append new node after this.\n\t\t *\n\t\t * This a convenience function that calls addNode(node, 'after')\n\t\t *\n\t\t * @param {NodeData} node node definition\n\t\t * @returns {FancytreeNode} new node\n\t\t */\n\t\tappendSibling: function (node) {\n\t\t\treturn this.addNode(node, \"after\");\n\t\t},\n\t\t/**\n\t\t * (experimental) Apply a modification (or navigation) operation.\n\t\t *\n\t\t * @param {string} cmd\n\t\t * @param {object} [opts]\n\t\t * @see Fancytree#applyCommand\n\t\t * @since 2.32\n\t\t */\n\t\tapplyCommand: function (cmd, opts) {\n\t\t\treturn this.tree.applyCommand(cmd, this, opts);\n\t\t},\n\t\t/**\n\t\t * Modify existing child nodes.\n\t\t *\n\t\t * @param {NodePatch} patch\n\t\t * @returns {$.Promise}\n\t\t * @see FancytreeNode#addChildren\n\t\t */\n\t\tapplyPatch: function (patch) {\n\t\t\t// patch [key, null] means 'remove'\n\t\t\tif (patch === null) {\n\t\t\t\tthis.remove();\n\t\t\t\treturn _getResolvedPromise(this);\n\t\t\t}\n\t\t\t// TODO: make sure that root node is not collapsed or modified\n\t\t\t// copy (most) attributes to node.ATTR or node.data.ATTR\n\t\t\tvar name,\n\t\t\t\tpromise,\n\t\t\t\tv,\n\t\t\t\tIGNORE_MAP = { children: true, expanded: true, parent: true }; // TODO: should be global\n\n\t\t\tfor (name in patch) {\n\t\t\t\tif (_hasProp(patch, name)) {\n\t\t\t\t\tv = patch[name];\n\t\t\t\t\tif (!IGNORE_MAP[name] && !_isFunction(v)) {\n\t\t\t\t\t\tif (NODE_ATTR_MAP[name]) {\n\t\t\t\t\t\t\tthis[name] = v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.data[name] = v;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Remove and/or create children\n\t\t\tif (_hasProp(patch, \"children\")) {\n\t\t\t\tthis.removeChildren();\n\t\t\t\tif (patch.children) {\n\t\t\t\t\t// only if not null and not empty list\n\t\t\t\t\t// TODO: addChildren instead?\n\t\t\t\t\tthis._setChildren(patch.children);\n\t\t\t\t}\n\t\t\t\t// TODO: how can we APPEND or INSERT child nodes?\n\t\t\t}\n\t\t\tif (this.isVisible()) {\n\t\t\t\tthis.renderTitle();\n\t\t\t\tthis.renderStatus();\n\t\t\t}\n\t\t\t// Expand collapse (final step, since this may be async)\n\t\t\tif (_hasProp(patch, \"expanded\")) {\n\t\t\t\tpromise = this.setExpanded(patch.expanded);\n\t\t\t} else {\n\t\t\t\tpromise = _getResolvedPromise(this);\n\t\t\t}\n\t\t\treturn promise;\n\t\t},\n\t\t/** Collapse all sibling nodes.\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tcollapseSiblings: function () {\n\t\t\treturn this.tree._callHook(\"nodeCollapseSiblings\", this);\n\t\t},\n\t\t/** Copy this node as sibling or child of `node`.\n\t\t *\n\t\t * @param {FancytreeNode} node source node\n\t\t * @param {string} [mode=child] 'before' | 'after' | 'child'\n\t\t * @param {Function} [map] callback function(NodeData, FancytreeNode) that could modify the new node\n\t\t * @returns {FancytreeNode} new\n\t\t */\n\t\tcopyTo: function (node, mode, map) {\n\t\t\treturn node.addNode(this.toDict(true, map), mode);\n\t\t},\n\t\t/** Count direct and indirect children.\n\t\t *\n\t\t * @param {boolean} [deep=true] pass 'false' to only count direct children\n\t\t * @returns {int} number of child nodes\n\t\t */\n\t\tcountChildren: function (deep) {\n\t\t\tvar cl = this.children,\n\t\t\t\ti,\n\t\t\t\tl,\n\t\t\t\tn;\n\t\t\tif (!cl) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tn = cl.length;\n\t\t\tif (deep !== false) {\n\t\t\t\tfor (i = 0, l = n; i < l; i++) {\n\t\t\t\t\tn += cl[i].countChildren();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn n;\n\t\t},\n\t\t// TODO: deactivate()\n\t\t/** Write to browser console if debugLevel >= 4 (prepending node info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\tdebug: function (msg) {\n\t\t\tif (this.tree.options.debugLevel >= 4) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"log\", arguments);\n\t\t\t}\n\t\t},\n\t\t/** Deprecated.\n\t\t * @deprecated since 2014-02-16. Use resetLazy() instead.\n\t\t */\n\t\tdiscard: function () {\n\t\t\tthis.warn(\n\t\t\t\t\"FancytreeNode.discard() is deprecated since 2014-02-16. Use .resetLazy() instead.\"\n\t\t\t);\n\t\t\treturn this.resetLazy();\n\t\t},\n\t\t/** Remove DOM elements for all descendents. May be called on .collapse event\n\t\t * to keep the DOM small.\n\t\t * @param {boolean} [includeSelf=false]\n\t\t */\n\t\tdiscardMarkup: function (includeSelf) {\n\t\t\tvar fn = includeSelf ? \"nodeRemoveMarkup\" : \"nodeRemoveChildMarkup\";\n\t\t\tthis.tree._callHook(fn, this);\n\t\t},\n\t\t/** Write error to browser console if debugLevel >= 1 (prepending tree info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\terror: function (msg) {\n\t\t\tif (this.tree.options.debugLevel >= 1) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"error\", arguments);\n\t\t\t}\n\t\t},\n\t\t/**Find all nodes that match condition (excluding self).\n\t\t *\n\t\t * @param {string | function(node)} match title string to search for, or a\n\t\t *     callback function that returns `true` if a node is matched.\n\t\t * @returns {FancytreeNode[]} array of nodes (may be empty)\n\t\t */\n\t\tfindAll: function (match) {\n\t\t\tmatch = _isFunction(match) ? match : _makeNodeTitleMatcher(match);\n\t\t\tvar res = [];\n\t\t\tthis.visit(function (n) {\n\t\t\t\tif (match(n)) {\n\t\t\t\t\tres.push(n);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn res;\n\t\t},\n\t\t/**Find first node that matches condition (excluding self).\n\t\t *\n\t\t * @param {string | function(node)} match title string to search for, or a\n\t\t *     callback function that returns `true` if a node is matched.\n\t\t * @returns {FancytreeNode} matching node or null\n\t\t * @see FancytreeNode#findAll\n\t\t */\n\t\tfindFirst: function (match) {\n\t\t\tmatch = _isFunction(match) ? match : _makeNodeTitleMatcher(match);\n\t\t\tvar res = null;\n\t\t\tthis.visit(function (n) {\n\t\t\t\tif (match(n)) {\n\t\t\t\t\tres = n;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn res;\n\t\t},\n\t\t/** Find a node relative to self.\n\t\t *\n\t\t * @param {number|string} where The keyCode that would normally trigger this move,\n\t\t *\t\tor a keyword ('down', 'first', 'last', 'left', 'parent', 'right', 'up').\n\t\t * @returns {FancytreeNode}\n\t\t * @since v2.31\n\t\t */\n\t\tfindRelatedNode: function (where, includeHidden) {\n\t\t\treturn this.tree.findRelatedNode(this, where, includeHidden);\n\t\t},\n\t\t/* Apply selection state (internal use only) */\n\t\t_changeSelectStatusAttrs: function (state) {\n\t\t\tvar changed = false,\n\t\t\t\topts = this.tree.options,\n\t\t\t\tunselectable = FT.evalOption(\n\t\t\t\t\t\"unselectable\",\n\t\t\t\t\tthis,\n\t\t\t\t\tthis,\n\t\t\t\t\topts,\n\t\t\t\t\tfalse\n\t\t\t\t),\n\t\t\t\tunselectableStatus = FT.evalOption(\n\t\t\t\t\t\"unselectableStatus\",\n\t\t\t\t\tthis,\n\t\t\t\t\tthis,\n\t\t\t\t\topts,\n\t\t\t\t\tundefined\n\t\t\t\t);\n\n\t\t\tif (unselectable && unselectableStatus != null) {\n\t\t\t\tstate = unselectableStatus;\n\t\t\t}\n\t\t\tswitch (state) {\n\t\t\t\tcase false:\n\t\t\t\t\tchanged = this.selected || this.partsel;\n\t\t\t\t\tthis.selected = false;\n\t\t\t\t\tthis.partsel = false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase true:\n\t\t\t\t\tchanged = !this.selected || !this.partsel;\n\t\t\t\t\tthis.selected = true;\n\t\t\t\t\tthis.partsel = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase undefined:\n\t\t\t\t\tchanged = this.selected || !this.partsel;\n\t\t\t\t\tthis.selected = false;\n\t\t\t\t\tthis.partsel = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t_assert(false, \"invalid state: \" + state);\n\t\t\t}\n\t\t\t// this.debug(\"fixSelection3AfterLoad() _changeSelectStatusAttrs()\", state, changed);\n\t\t\tif (changed) {\n\t\t\t\tthis.renderStatus();\n\t\t\t}\n\t\t\treturn changed;\n\t\t},\n\t\t/**\n\t\t * Fix selection status, after this node was (de)selected in multi-hier mode.\n\t\t * This includes (de)selecting all children.\n\t\t */\n\t\tfixSelection3AfterClick: function (callOpts) {\n\t\t\tvar flag = this.isSelected();\n\n\t\t\t// this.debug(\"fixSelection3AfterClick()\");\n\n\t\t\tthis.visit(function (node) {\n\t\t\t\tnode._changeSelectStatusAttrs(flag);\n\t\t\t\tif (node.radiogroup) {\n\t\t\t\t\t// #931: don't (de)select this branch\n\t\t\t\t\treturn \"skip\";\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.fixSelection3FromEndNodes(callOpts);\n\t\t},\n\t\t/**\n\t\t * Fix selection status for multi-hier mode.\n\t\t * Only end-nodes are considered to update the descendants branch and parents.\n\t\t * Should be called after this node has loaded new children or after\n\t\t * children have been modified using the API.\n\t\t */\n\t\tfixSelection3FromEndNodes: function (callOpts) {\n\t\t\tvar opts = this.tree.options;\n\n\t\t\t// this.debug(\"fixSelection3FromEndNodes()\");\n\t\t\t_assert(opts.selectMode === 3, \"expected selectMode 3\");\n\n\t\t\t// Visit all end nodes and adjust their parent's `selected` and `partsel`\n\t\t\t// attributes. Return selection state true, false, or undefined.\n\t\t\tfunction _walk(node) {\n\t\t\t\tvar i,\n\t\t\t\t\tl,\n\t\t\t\t\tchild,\n\t\t\t\t\ts,\n\t\t\t\t\tstate,\n\t\t\t\t\tallSelected,\n\t\t\t\t\tsomeSelected,\n\t\t\t\t\tunselIgnore,\n\t\t\t\t\tunselState,\n\t\t\t\t\tchildren = node.children;\n\n\t\t\t\tif (children && children.length) {\n\t\t\t\t\t// check all children recursively\n\t\t\t\t\tallSelected = true;\n\t\t\t\t\tsomeSelected = false;\n\n\t\t\t\t\tfor (i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\t\tchild = children[i];\n\t\t\t\t\t\t// the selection state of a node is not relevant; we need the end-nodes\n\t\t\t\t\t\ts = _walk(child);\n\t\t\t\t\t\t// if( !child.unselectableIgnore ) {\n\t\t\t\t\t\tunselIgnore = FT.evalOption(\n\t\t\t\t\t\t\t\"unselectableIgnore\",\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\topts,\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!unselIgnore) {\n\t\t\t\t\t\t\tif (s !== false) {\n\t\t\t\t\t\t\t\tsomeSelected = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (s !== true) {\n\t\t\t\t\t\t\t\tallSelected = 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// eslint-disable-next-line no-nested-ternary\n\t\t\t\t\tstate = allSelected\n\t\t\t\t\t\t? true\n\t\t\t\t\t\t: someSelected\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: false;\n\t\t\t\t} else {\n\t\t\t\t\t// This is an end-node: simply report the status\n\t\t\t\t\tunselState = FT.evalOption(\n\t\t\t\t\t\t\"unselectableStatus\",\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\topts,\n\t\t\t\t\t\tundefined\n\t\t\t\t\t);\n\t\t\t\t\tstate = unselState == null ? !!node.selected : !!unselState;\n\t\t\t\t}\n\t\t\t\t// #939: Keep a `partsel` flag that was explicitly set on a lazy node\n\t\t\t\tif (\n\t\t\t\t\tnode.partsel &&\n\t\t\t\t\t!node.selected &&\n\t\t\t\t\tnode.lazy &&\n\t\t\t\t\tnode.children == null\n\t\t\t\t) {\n\t\t\t\t\tstate = undefined;\n\t\t\t\t}\n\t\t\t\tnode._changeSelectStatusAttrs(state);\n\t\t\t\treturn state;\n\t\t\t}\n\t\t\t_walk(this);\n\n\t\t\t// Update parent's state\n\t\t\tthis.visitParents(function (node) {\n\t\t\t\tvar i,\n\t\t\t\t\tl,\n\t\t\t\t\tchild,\n\t\t\t\t\tstate,\n\t\t\t\t\tunselIgnore,\n\t\t\t\t\tunselState,\n\t\t\t\t\tchildren = node.children,\n\t\t\t\t\tallSelected = true,\n\t\t\t\t\tsomeSelected = false;\n\n\t\t\t\tfor (i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tchild = children[i];\n\t\t\t\t\tunselIgnore = FT.evalOption(\n\t\t\t\t\t\t\"unselectableIgnore\",\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\topts,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t\tif (!unselIgnore) {\n\t\t\t\t\t\tunselState = FT.evalOption(\n\t\t\t\t\t\t\t\"unselectableStatus\",\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\topts,\n\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstate =\n\t\t\t\t\t\t\tunselState == null\n\t\t\t\t\t\t\t\t? !!child.selected\n\t\t\t\t\t\t\t\t: !!unselState;\n\t\t\t\t\t\t// When fixing the parents, we trust the sibling status (i.e.\n\t\t\t\t\t\t// we don't recurse)\n\t\t\t\t\t\tif (state || child.partsel) {\n\t\t\t\t\t\t\tsomeSelected = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!state) {\n\t\t\t\t\t\t\tallSelected = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line no-nested-ternary\n\t\t\t\tstate = allSelected ? true : someSelected ? undefined : false;\n\t\t\t\tnode._changeSelectStatusAttrs(state);\n\t\t\t});\n\t\t},\n\t\t// TODO: focus()\n\t\t/**\n\t\t * Update node data. If dict contains 'children', then also replace\n\t\t * the hole sub tree.\n\t\t * @param {NodeData} dict\n\t\t *\n\t\t * @see FancytreeNode#addChildren\n\t\t * @see FancytreeNode#applyPatch\n\t\t */\n\t\tfromDict: function (dict) {\n\t\t\t// copy all other attributes to this.data.xxx\n\t\t\tfor (var name in dict) {\n\t\t\t\tif (NODE_ATTR_MAP[name]) {\n\t\t\t\t\t// node.NAME = dict.NAME\n\t\t\t\t\tthis[name] = dict[name];\n\t\t\t\t} else if (name === \"data\") {\n\t\t\t\t\t// node.data += dict.data\n\t\t\t\t\t$.extend(this.data, dict.data);\n\t\t\t\t} else if (\n\t\t\t\t\t!_isFunction(dict[name]) &&\n\t\t\t\t\t!NONE_NODE_DATA_MAP[name]\n\t\t\t\t) {\n\t\t\t\t\t// node.data.NAME = dict.NAME\n\t\t\t\t\tthis.data[name] = dict[name];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dict.children) {\n\t\t\t\t// recursively set children and render\n\t\t\t\tthis.removeChildren();\n\t\t\t\tthis.addChildren(dict.children);\n\t\t\t}\n\t\t\tthis.renderTitle();\n\t\t\t/*\n\t\t\tvar children = dict.children;\n\t\t\tif(children === undefined){\n\t\t\t\tthis.data = $.extend(this.data, dict);\n\t\t\t\tthis.render();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdict = $.extend({}, dict);\n\t\t\tdict.children = undefined;\n\t\t\tthis.data = $.extend(this.data, dict);\n\t\t\tthis.removeChildren();\n\t\t\tthis.addChild(children);\n\t\t\t*/\n\t\t},\n\t\t/** Return the list of child nodes (undefined for unexpanded lazy nodes).\n\t\t * @returns {FancytreeNode[] | undefined}\n\t\t */\n\t\tgetChildren: function () {\n\t\t\tif (this.hasChildren() === undefined) {\n\t\t\t\t// TODO: only required for lazy nodes?\n\t\t\t\treturn undefined; // Lazy node: unloaded, currently loading, or load error\n\t\t\t}\n\t\t\treturn this.children;\n\t\t},\n\t\t/** Return the first child node or null.\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetFirstChild: function () {\n\t\t\treturn this.children ? this.children[0] : null;\n\t\t},\n\t\t/** Return the 0-based child index.\n\t\t * @returns {int}\n\t\t */\n\t\tgetIndex: function () {\n\t\t\t// return this.parent.children.indexOf(this);\n\t\t\treturn $.inArray(this, this.parent.children); // indexOf doesn't work in IE7\n\t\t},\n\t\t/** Return the hierarchical child index (1-based, e.g. '3.2.4').\n\t\t * @param {string} [separator=\".\"]\n\t\t * @param {int} [digits=1]\n\t\t * @returns {string}\n\t\t */\n\t\tgetIndexHier: function (separator, digits) {\n\t\t\tseparator = separator || \".\";\n\t\t\tvar s,\n\t\t\t\tres = [];\n\t\t\t$.each(this.getParentList(false, true), function (i, o) {\n\t\t\t\ts = \"\" + (o.getIndex() + 1);\n\t\t\t\tif (digits) {\n\t\t\t\t\t// prepend leading zeroes\n\t\t\t\t\ts = (\"0000000\" + s).substr(-digits);\n\t\t\t\t}\n\t\t\t\tres.push(s);\n\t\t\t});\n\t\t\treturn res.join(separator);\n\t\t},\n\t\t/** Return the parent keys separated by options.keyPathSeparator, e.g. \"/id_1/id_17/id_32\".\n\t\t *\n\t\t * (Unlike `node.getPath()`, this method prepends a \"/\" and inverts the first argument.)\n\t\t *\n\t\t * @see FancytreeNode#getPath\n\t\t * @param {boolean} [excludeSelf=false]\n\t\t * @returns {string}\n\t\t */\n\t\tgetKeyPath: function (excludeSelf) {\n\t\t\tvar sep = this.tree.options.keyPathSeparator;\n\n\t\t\treturn sep + this.getPath(!excludeSelf, \"key\", sep);\n\t\t},\n\t\t/** Return the last child of this node or null.\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetLastChild: function () {\n\t\t\treturn this.children\n\t\t\t\t? this.children[this.children.length - 1]\n\t\t\t\t: null;\n\t\t},\n\t\t/** Return node depth. 0: System root node, 1: visible top-level node, 2: first sub-level, ... .\n\t\t * @returns {int}\n\t\t */\n\t\tgetLevel: function () {\n\t\t\tvar level = 0,\n\t\t\t\tdtn = this.parent;\n\t\t\twhile (dtn) {\n\t\t\t\tlevel++;\n\t\t\t\tdtn = dtn.parent;\n\t\t\t}\n\t\t\treturn level;\n\t\t},\n\t\t/** Return the successor node (under the same parent) or null.\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetNextSibling: function () {\n\t\t\t// TODO: use indexOf, if available: (not in IE6)\n\t\t\tif (this.parent) {\n\t\t\t\tvar i,\n\t\t\t\t\tl,\n\t\t\t\t\tac = this.parent.children;\n\n\t\t\t\tfor (i = 0, l = ac.length - 1; i < l; i++) {\n\t\t\t\t\t// up to length-2, so next(last) = null\n\t\t\t\t\tif (ac[i] === this) {\n\t\t\t\t\t\treturn ac[i + 1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t/** Return the parent node (null for the system root node).\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetParent: function () {\n\t\t\t// TODO: return null for top-level nodes?\n\t\t\treturn this.parent;\n\t\t},\n\t\t/** Return an array of all parent nodes (top-down).\n\t\t * @param {boolean} [includeRoot=false] Include the invisible system root node.\n\t\t * @param {boolean} [includeSelf=false] Include the node itself.\n\t\t * @returns {FancytreeNode[]}\n\t\t */\n\t\tgetParentList: function (includeRoot, includeSelf) {\n\t\t\tvar l = [],\n\t\t\t\tdtn = includeSelf ? this : this.parent;\n\t\t\twhile (dtn) {\n\t\t\t\tif (includeRoot || dtn.parent) {\n\t\t\t\t\tl.unshift(dtn);\n\t\t\t\t}\n\t\t\t\tdtn = dtn.parent;\n\t\t\t}\n\t\t\treturn l;\n\t\t},\n\t\t/** Return a string representing the hierachical node path, e.g. \"a/b/c\".\n\t\t * @param {boolean} [includeSelf=true]\n\t\t * @param {string | function} [part=\"title\"] node property name or callback\n\t\t * @param {string} [separator=\"/\"]\n\t\t * @returns {string}\n\t\t * @since v2.31\n\t\t */\n\t\tgetPath: function (includeSelf, part, separator) {\n\t\t\tincludeSelf = includeSelf !== false;\n\t\t\tpart = part || \"title\";\n\t\t\tseparator = separator || \"/\";\n\n\t\t\tvar val,\n\t\t\t\tpath = [],\n\t\t\t\tisFunc = _isFunction(part);\n\n\t\t\tthis.visitParents(function (n) {\n\t\t\t\tif (n.parent) {\n\t\t\t\t\tval = isFunc ? part(n) : n[part];\n\t\t\t\t\tpath.unshift(val);\n\t\t\t\t}\n\t\t\t}, includeSelf);\n\t\t\treturn path.join(separator);\n\t\t},\n\t\t/** Return the predecessor node (under the same parent) or null.\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetPrevSibling: function () {\n\t\t\tif (this.parent) {\n\t\t\t\tvar i,\n\t\t\t\t\tl,\n\t\t\t\t\tac = this.parent.children;\n\n\t\t\t\tfor (i = 1, l = ac.length; i < l; i++) {\n\t\t\t\t\t// start with 1, so prev(first) = null\n\t\t\t\t\tif (ac[i] === this) {\n\t\t\t\t\t\treturn ac[i - 1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t/**\n\t\t * Return an array of selected descendant nodes.\n\t\t * @param {boolean} [stopOnParents=false] only return the topmost selected\n\t\t *     node (useful with selectMode 3)\n\t\t * @returns {FancytreeNode[]}\n\t\t */\n\t\tgetSelectedNodes: function (stopOnParents) {\n\t\t\tvar nodeList = [];\n\t\t\tthis.visit(function (node) {\n\t\t\t\tif (node.selected) {\n\t\t\t\t\tnodeList.push(node);\n\t\t\t\t\tif (stopOnParents === true) {\n\t\t\t\t\t\treturn \"skip\"; // stop processing this branch\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn nodeList;\n\t\t},\n\t\t/** Return true if node has children. Return undefined if not sure, i.e. the node is lazy and not yet loaded).\n\t\t * @returns {boolean | undefined}\n\t\t */\n\t\thasChildren: function () {\n\t\t\tif (this.lazy) {\n\t\t\t\tif (this.children == null) {\n\t\t\t\t\t// null or undefined: Not yet loaded\n\t\t\t\t\treturn undefined;\n\t\t\t\t} else if (this.children.length === 0) {\n\t\t\t\t\t// Loaded, but response was empty\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (\n\t\t\t\t\tthis.children.length === 1 &&\n\t\t\t\t\tthis.children[0].isStatusNode()\n\t\t\t\t) {\n\t\t\t\t\t// Currently loading or load error\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !!(this.children && this.children.length);\n\t\t},\n\t\t/**\n\t\t * Return true if node has `className` defined in .extraClasses.\n\t\t *\n\t\t * @param {string} className class name (separate multiple classes by space)\n\t\t * @returns {boolean}\n\t\t *\n\t\t * @since 2.32\n\t\t */\n\t\thasClass: function (className) {\n\t\t\treturn (\n\t\t\t\t(\" \" + (this.extraClasses || \"\") + \" \").indexOf(\n\t\t\t\t\t\" \" + className + \" \"\n\t\t\t\t) >= 0\n\t\t\t);\n\t\t},\n\t\t/** Return true if node has keyboard focus.\n\t\t * @returns {boolean}\n\t\t */\n\t\thasFocus: function () {\n\t\t\treturn this.tree.hasFocus() && this.tree.focusNode === this;\n\t\t},\n\t\t/** Write to browser console if debugLevel >= 3 (prepending node info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\tinfo: function (msg) {\n\t\t\tif (this.tree.options.debugLevel >= 3) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"info\", arguments);\n\t\t\t}\n\t\t},\n\t\t/** Return true if node is active (see also FancytreeNode#isSelected).\n\t\t * @returns {boolean}\n\t\t */\n\t\tisActive: function () {\n\t\t\treturn this.tree.activeNode === this;\n\t\t},\n\t\t/** Return true if node is vertically below `otherNode`, i.e. rendered in a subsequent row.\n\t\t * @param {FancytreeNode} otherNode\n\t\t * @returns {boolean}\n\t\t * @since 2.28\n\t\t */\n\t\tisBelowOf: function (otherNode) {\n\t\t\treturn this.getIndexHier(\".\", 5) > otherNode.getIndexHier(\".\", 5);\n\t\t},\n\t\t/** Return true if node is a direct child of otherNode.\n\t\t * @param {FancytreeNode} otherNode\n\t\t * @returns {boolean}\n\t\t */\n\t\tisChildOf: function (otherNode) {\n\t\t\treturn this.parent && this.parent === otherNode;\n\t\t},\n\t\t/** Return true, if node is a direct or indirect sub node of otherNode.\n\t\t * @param {FancytreeNode} otherNode\n\t\t * @returns {boolean}\n\t\t */\n\t\tisDescendantOf: function (otherNode) {\n\t\t\tif (!otherNode || otherNode.tree !== this.tree) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar p = this.parent;\n\t\t\twhile (p) {\n\t\t\t\tif (p === otherNode) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (p === p.parent) {\n\t\t\t\t\t$.error(\"Recursive parent link: \" + p);\n\t\t\t\t}\n\t\t\t\tp = p.parent;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t/** Return true if node is expanded.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisExpanded: function () {\n\t\t\treturn !!this.expanded;\n\t\t},\n\t\t/** Return true if node is the first node of its parent's children.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisFirstSibling: function () {\n\t\t\tvar p = this.parent;\n\t\t\treturn !p || p.children[0] === this;\n\t\t},\n\t\t/** Return true if node is a folder, i.e. has the node.folder attribute set.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisFolder: function () {\n\t\t\treturn !!this.folder;\n\t\t},\n\t\t/** Return true if node is the last node of its parent's children.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisLastSibling: function () {\n\t\t\tvar p = this.parent;\n\t\t\treturn !p || p.children[p.children.length - 1] === this;\n\t\t},\n\t\t/** Return true if node is lazy (even if data was already loaded)\n\t\t * @returns {boolean}\n\t\t */\n\t\tisLazy: function () {\n\t\t\treturn !!this.lazy;\n\t\t},\n\t\t/** Return true if node is lazy and loaded. For non-lazy nodes always return true.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisLoaded: function () {\n\t\t\treturn !this.lazy || this.hasChildren() !== undefined; // Also checks if the only child is a status node\n\t\t},\n\t\t/** Return true if children are currently beeing loaded, i.e. a Ajax request is pending.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisLoading: function () {\n\t\t\treturn !!this._isLoading;\n\t\t},\n\t\t/*\n\t\t * @deprecated since v2.4.0:  Use isRootNode() instead\n\t\t */\n\t\tisRoot: function () {\n\t\t\treturn this.isRootNode();\n\t\t},\n\t\t/** Return true if node is partially selected (tri-state).\n\t\t * @returns {boolean}\n\t\t * @since 2.23\n\t\t */\n\t\tisPartsel: function () {\n\t\t\treturn !this.selected && !!this.partsel;\n\t\t},\n\t\t/** (experimental) Return true if this is partially loaded.\n\t\t * @returns {boolean}\n\t\t * @since 2.15\n\t\t */\n\t\tisPartload: function () {\n\t\t\treturn !!this.partload;\n\t\t},\n\t\t/** Return true if this is the (invisible) system root node.\n\t\t * @returns {boolean}\n\t\t * @since 2.4\n\t\t */\n\t\tisRootNode: function () {\n\t\t\treturn this.tree.rootNode === this;\n\t\t},\n\t\t/** Return true if node is selected, i.e. has a checkmark set (see also FancytreeNode#isActive).\n\t\t * @returns {boolean}\n\t\t */\n\t\tisSelected: function () {\n\t\t\treturn !!this.selected;\n\t\t},\n\t\t/** Return true if this node is a temporarily generated system node like\n\t\t * 'loading', 'paging', or 'error' (node.statusNodeType contains the type).\n\t\t * @returns {boolean}\n\t\t */\n\t\tisStatusNode: function () {\n\t\t\treturn !!this.statusNodeType;\n\t\t},\n\t\t/** Return true if this node is a status node of type 'paging'.\n\t\t * @returns {boolean}\n\t\t * @since 2.15\n\t\t */\n\t\tisPagingNode: function () {\n\t\t\treturn this.statusNodeType === \"paging\";\n\t\t},\n\t\t/** Return true if this a top level node, i.e. a direct child of the (invisible) system root node.\n\t\t * @returns {boolean}\n\t\t * @since 2.4\n\t\t */\n\t\tisTopLevel: function () {\n\t\t\treturn this.tree.rootNode === this.parent;\n\t\t},\n\t\t/** Return true if node is lazy and not yet loaded. For non-lazy nodes always return false.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisUndefined: function () {\n\t\t\treturn this.hasChildren() === undefined; // also checks if the only child is a status node\n\t\t},\n\t\t/** Return true if all parent nodes are expanded. Note: this does not check\n\t\t * whether the node is scrolled into the visible part of the screen.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisVisible: function () {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tn,\n\t\t\t\thasFilter = this.tree.enableFilter,\n\t\t\t\tparents = this.getParentList(false, false);\n\n\t\t\t// TODO: check $(n.span).is(\":visible\")\n\t\t\t// i.e. return false for nodes (but not parents) that are hidden\n\t\t\t// by a filter\n\t\t\tif (hasFilter && !this.match && !this.subMatchCount) {\n\t\t\t\t// this.debug( \"isVisible: HIDDEN (\" + hasFilter + \", \" + this.match + \", \" + this.match + \")\" );\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor (i = 0, l = parents.length; i < l; i++) {\n\t\t\t\tn = parents[i];\n\n\t\t\t\tif (!n.expanded) {\n\t\t\t\t\t// this.debug(\"isVisible: HIDDEN (parent collapsed)\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// if (hasFilter && !n.match && !n.subMatchCount) {\n\t\t\t\t// \tthis.debug(\"isVisible: HIDDEN (\" + hasFilter + \", \" + this.match + \", \" + this.match + \")\");\n\t\t\t\t// \treturn false;\n\t\t\t\t// }\n\t\t\t}\n\t\t\t// this.debug(\"isVisible: VISIBLE\");\n\t\t\treturn true;\n\t\t},\n\t\t/** Deprecated.\n\t\t * @deprecated since 2014-02-16: use load() instead.\n\t\t */\n\t\tlazyLoad: function (discard) {\n\t\t\t$.error(\n\t\t\t\t\"FancytreeNode.lazyLoad() is deprecated since 2014-02-16. Use .load() instead.\"\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Load all children of a lazy node if neccessary. The <i>expanded</i> state is maintained.\n\t\t * @param {boolean} [forceReload=false] Pass true to discard any existing nodes before. Otherwise this method does nothing if the node was already loaded.\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tload: function (forceReload) {\n\t\t\tvar res,\n\t\t\t\tsource,\n\t\t\t\tself = this,\n\t\t\t\twasExpanded = this.isExpanded();\n\n\t\t\t_assert(this.isLazy(), \"load() requires a lazy node\");\n\t\t\t// _assert( forceReload || this.isUndefined(), \"Pass forceReload=true to re-load a lazy node\" );\n\t\t\tif (!forceReload && !this.isUndefined()) {\n\t\t\t\treturn _getResolvedPromise(this);\n\t\t\t}\n\t\t\tif (this.isLoaded()) {\n\t\t\t\tthis.resetLazy(); // also collapses\n\t\t\t}\n\t\t\t// This method is also called by setExpanded() and loadKeyPath(), so we\n\t\t\t// have to avoid recursion.\n\t\t\tsource = this.tree._triggerNodeEvent(\"lazyLoad\", this);\n\t\t\tif (source === false) {\n\t\t\t\t// #69\n\t\t\t\treturn _getResolvedPromise(this);\n\t\t\t}\n\t\t\t_assert(\n\t\t\t\ttypeof source !== \"boolean\",\n\t\t\t\t\"lazyLoad event must return source in data.result\"\n\t\t\t);\n\t\t\tres = this.tree._callHook(\"nodeLoadChildren\", this, source);\n\t\t\tif (wasExpanded) {\n\t\t\t\tthis.expanded = true;\n\t\t\t\tres.always(function () {\n\t\t\t\t\tself.render();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tres.always(function () {\n\t\t\t\t\tself.renderStatus(); // fix expander icon to 'loaded'\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t/** Expand all parents and optionally scroll into visible area as neccessary.\n\t\t * Promise is resolved, when lazy loading and animations are done.\n\t\t * @param {object} [opts] passed to `setExpanded()`.\n\t\t *     Defaults to {noAnimation: false, noEvents: false, scrollIntoView: true}\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tmakeVisible: function (opts) {\n\t\t\tvar i,\n\t\t\t\tself = this,\n\t\t\t\tdeferreds = [],\n\t\t\t\tdfd = new $.Deferred(),\n\t\t\t\tparents = this.getParentList(false, false),\n\t\t\t\tlen = parents.length,\n\t\t\t\teffects = !(opts && opts.noAnimation === true),\n\t\t\t\tscroll = !(opts && opts.scrollIntoView === false);\n\n\t\t\t// Expand bottom-up, so only the top node is animated\n\t\t\tfor (i = len - 1; i >= 0; i--) {\n\t\t\t\t// self.debug(\"pushexpand\" + parents[i]);\n\t\t\t\tdeferreds.push(parents[i].setExpanded(true, opts));\n\t\t\t}\n\t\t\t$.when.apply($, deferreds).done(function () {\n\t\t\t\t// All expands have finished\n\t\t\t\t// self.debug(\"expand DONE\", scroll);\n\t\t\t\tif (scroll) {\n\t\t\t\t\tself.scrollIntoView(effects).done(function () {\n\t\t\t\t\t\t// self.debug(\"scroll DONE\");\n\t\t\t\t\t\tdfd.resolve();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdfd.resolve();\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn dfd.promise();\n\t\t},\n\t\t/** Move this node to targetNode.\n\t\t *  @param {FancytreeNode} targetNode\n\t\t *  @param {string} mode <pre>\n\t\t *      'child': append this node as last child of targetNode.\n\t\t *               This is the default. To be compatble with the D'n'd\n\t\t *               hitMode, we also accept 'over'.\n\t\t *      'firstChild': add this node as first child of targetNode.\n\t\t *      'before': add this node as sibling before targetNode.\n\t\t *      'after': add this node as sibling after targetNode.</pre>\n\t\t *  @param {function} [map] optional callback(FancytreeNode) to allow modifcations\n\t\t */\n\t\tmoveTo: function (targetNode, mode, map) {\n\t\t\tif (mode === undefined || mode === \"over\") {\n\t\t\t\tmode = \"child\";\n\t\t\t} else if (mode === \"firstChild\") {\n\t\t\t\tif (targetNode.children && targetNode.children.length) {\n\t\t\t\t\tmode = \"before\";\n\t\t\t\t\ttargetNode = targetNode.children[0];\n\t\t\t\t} else {\n\t\t\t\t\tmode = \"child\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar pos,\n\t\t\t\ttree = this.tree,\n\t\t\t\tprevParent = this.parent,\n\t\t\t\ttargetParent =\n\t\t\t\t\tmode === \"child\" ? targetNode : targetNode.parent;\n\n\t\t\tif (this === targetNode) {\n\t\t\t\treturn;\n\t\t\t} else if (!this.parent) {\n\t\t\t\t$.error(\"Cannot move system root\");\n\t\t\t} else if (targetParent.isDescendantOf(this)) {\n\t\t\t\t$.error(\"Cannot move a node to its own descendant\");\n\t\t\t}\n\t\t\tif (targetParent !== prevParent) {\n\t\t\t\tprevParent.triggerModifyChild(\"remove\", this);\n\t\t\t}\n\t\t\t// Unlink this node from current parent\n\t\t\tif (this.parent.children.length === 1) {\n\t\t\t\tif (this.parent === targetParent) {\n\t\t\t\t\treturn; // #258\n\t\t\t\t}\n\t\t\t\tthis.parent.children = this.parent.lazy ? [] : null;\n\t\t\t\tthis.parent.expanded = false;\n\t\t\t} else {\n\t\t\t\tpos = $.inArray(this, this.parent.children);\n\t\t\t\t_assert(pos >= 0, \"invalid source parent\");\n\t\t\t\tthis.parent.children.splice(pos, 1);\n\t\t\t}\n\t\t\t// Remove from source DOM parent\n\t\t\t// if(this.parent.ul){\n\t\t\t// \tthis.parent.ul.removeChild(this.li);\n\t\t\t// }\n\n\t\t\t// Insert this node to target parent's child list\n\t\t\tthis.parent = targetParent;\n\t\t\tif (targetParent.hasChildren()) {\n\t\t\t\tswitch (mode) {\n\t\t\t\t\tcase \"child\":\n\t\t\t\t\t\t// Append to existing target children\n\t\t\t\t\t\ttargetParent.children.push(this);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"before\":\n\t\t\t\t\t\t// Insert this node before target node\n\t\t\t\t\t\tpos = $.inArray(targetNode, targetParent.children);\n\t\t\t\t\t\t_assert(pos >= 0, \"invalid target parent\");\n\t\t\t\t\t\ttargetParent.children.splice(pos, 0, this);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"after\":\n\t\t\t\t\t\t// Insert this node after target node\n\t\t\t\t\t\tpos = $.inArray(targetNode, targetParent.children);\n\t\t\t\t\t\t_assert(pos >= 0, \"invalid target parent\");\n\t\t\t\t\t\ttargetParent.children.splice(pos + 1, 0, this);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t$.error(\"Invalid mode \" + mode);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttargetParent.children = [this];\n\t\t\t}\n\t\t\t// Parent has no <ul> tag yet:\n\t\t\t// if( !targetParent.ul ) {\n\t\t\t// \t// This is the parent's first child: create UL tag\n\t\t\t// \t// (Hidden, because it will be\n\t\t\t// \ttargetParent.ul = document.createElement(\"ul\");\n\t\t\t// \ttargetParent.ul.style.display = \"none\";\n\t\t\t// \ttargetParent.li.appendChild(targetParent.ul);\n\t\t\t// }\n\t\t\t// // Issue 319: Add to target DOM parent (only if node was already rendered(expanded))\n\t\t\t// if(this.li){\n\t\t\t// \ttargetParent.ul.appendChild(this.li);\n\t\t\t// }\n\n\t\t\t// Let caller modify the nodes\n\t\t\tif (map) {\n\t\t\t\ttargetNode.visit(map, true);\n\t\t\t}\n\t\t\tif (targetParent === prevParent) {\n\t\t\t\ttargetParent.triggerModifyChild(\"move\", this);\n\t\t\t} else {\n\t\t\t\t// prevParent.triggerModifyChild(\"remove\", this);\n\t\t\t\ttargetParent.triggerModifyChild(\"add\", this);\n\t\t\t}\n\t\t\t// Handle cross-tree moves\n\t\t\tif (tree !== targetNode.tree) {\n\t\t\t\t// Fix node.tree for all source nodes\n\t\t\t\t// \t_assert(false, \"Cross-tree move is not yet implemented.\");\n\t\t\t\tthis.warn(\"Cross-tree moveTo is experimental!\");\n\t\t\t\tthis.visit(function (n) {\n\t\t\t\t\t// TODO: fix selection state and activation, ...\n\t\t\t\t\tn.tree = targetNode.tree;\n\t\t\t\t}, true);\n\t\t\t}\n\n\t\t\t// A collaposed node won't re-render children, so we have to remove it manually\n\t\t\t// if( !targetParent.expanded ){\n\t\t\t//   prevParent.ul.removeChild(this.li);\n\t\t\t// }\n\t\t\ttree._callHook(\"treeStructureChanged\", tree, \"moveTo\");\n\n\t\t\t// Update HTML markup\n\t\t\tif (!prevParent.isDescendantOf(targetParent)) {\n\t\t\t\tprevParent.render();\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!targetParent.isDescendantOf(prevParent) &&\n\t\t\t\ttargetParent !== prevParent\n\t\t\t) {\n\t\t\t\ttargetParent.render();\n\t\t\t}\n\t\t\t// TODO: fix selection state\n\t\t\t// TODO: fix active state\n\n\t\t\t/*\n\t\t\tvar tree = this.tree;\n\t\t\tvar opts = tree.options;\n\t\t\tvar pers = tree.persistence;\n\n\t\t\t// Always expand, if it's below minExpandLevel\n\t\t\t// tree.logDebug (\"%s._addChildNode(%o), l=%o\", this, ftnode, ftnode.getLevel());\n\t\t\tif ( opts.minExpandLevel >= ftnode.getLevel() ) {\n\t\t\t\t// tree.logDebug (\"Force expand for %o\", ftnode);\n\t\t\t\tthis.bExpanded = true;\n\t\t\t}\n\n\t\t\t// In multi-hier mode, update the parents selection state\n\t\t\t// DT issue #82: only if not initializing, because the children may not exist yet\n\t\t\t// if( !ftnode.data.isStatusNode() && opts.selectMode==3 && !isInitializing )\n\t\t\t// \tftnode._fixSelectionState();\n\n\t\t\t// In multi-hier mode, update the parents selection state\n\t\t\tif( ftnode.bSelected && opts.selectMode==3 ) {\n\t\t\t\tvar p = this;\n\t\t\t\twhile( p ) {\n\t\t\t\t\tif( !p.hasSubSel )\n\t\t\t\t\t\tp._setSubSel(true);\n\t\t\t\t\tp = p.parent;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// render this node and the new child\n\t\t\tif ( tree.bEnableUpdate )\n\t\t\t\tthis.render();\n\t\t\treturn ftnode;\n\t\t\t*/\n\t\t},\n\t\t/** Set focus relative to this node and optionally activate.\n\t\t *\n\t\t * 'left' collapses the node if it is expanded, or move to the parent\n\t\t * otherwise.\n\t\t * 'right' expands the node if it is collapsed, or move to the first\n\t\t * child otherwise.\n\t\t *\n\t\t * @param {string|number} where 'down', 'first', 'last', 'left', 'parent', 'right', or 'up'.\n\t\t *   (Alternatively the keyCode that would normally trigger this move,\n\t\t *   e.g. `$.ui.keyCode.LEFT` = 'left'.\n\t\t * @param {boolean} [activate=true]\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tnavigate: function (where, activate) {\n\t\t\tvar node,\n\t\t\t\tKC = $.ui.keyCode;\n\n\t\t\t// Handle optional expand/collapse action for LEFT/RIGHT\n\t\t\tswitch (where) {\n\t\t\t\tcase \"left\":\n\t\t\t\tcase KC.LEFT:\n\t\t\t\t\tif (this.expanded) {\n\t\t\t\t\t\treturn this.setExpanded(false);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\tcase KC.RIGHT:\n\t\t\t\t\tif (!this.expanded && (this.children || this.lazy)) {\n\t\t\t\t\t\treturn this.setExpanded();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// Otherwise activate or focus the related node\n\t\t\tnode = this.findRelatedNode(where);\n\t\t\tif (node) {\n\t\t\t\t// setFocus/setActive will scroll later (if autoScroll is specified)\n\t\t\t\ttry {\n\t\t\t\t\tnode.makeVisible({ scrollIntoView: false });\n\t\t\t\t} catch (e) {} // #272\n\t\t\t\tif (activate === false) {\n\t\t\t\t\tnode.setFocus();\n\t\t\t\t\treturn _getResolvedPromise();\n\t\t\t\t}\n\t\t\t\treturn node.setActive();\n\t\t\t}\n\t\t\tthis.warn(\"Could not find related node '\" + where + \"'.\");\n\t\t\treturn _getResolvedPromise();\n\t\t},\n\t\t/**\n\t\t * Remove this node (not allowed for system root).\n\t\t */\n\t\tremove: function () {\n\t\t\treturn this.parent.removeChild(this);\n\t\t},\n\t\t/**\n\t\t * Remove childNode from list of direct children.\n\t\t * @param {FancytreeNode} childNode\n\t\t */\n\t\tremoveChild: function (childNode) {\n\t\t\treturn this.tree._callHook(\"nodeRemoveChild\", this, childNode);\n\t\t},\n\t\t/**\n\t\t * Remove all child nodes and descendents. This converts the node into a leaf.<br>\n\t\t * If this was a lazy node, it is still considered 'loaded'; call node.resetLazy()\n\t\t * in order to trigger lazyLoad on next expand.\n\t\t */\n\t\tremoveChildren: function () {\n\t\t\treturn this.tree._callHook(\"nodeRemoveChildren\", this);\n\t\t},\n\t\t/**\n\t\t * Remove class from node's span tag and .extraClasses.\n\t\t *\n\t\t * @param {string} className class name\n\t\t *\n\t\t * @since 2.17\n\t\t */\n\t\tremoveClass: function (className) {\n\t\t\treturn this.toggleClass(className, false);\n\t\t},\n\t\t/**\n\t\t * This method renders and updates all HTML markup that is required\n\t\t * to display this node in its current state.<br>\n\t\t * Note:\n\t\t * <ul>\n\t\t * <li>It should only be neccessary to call this method after the node object\n\t\t *     was modified by direct access to its properties, because the common\n\t\t *     API methods (node.setTitle(), moveTo(), addChildren(), remove(), ...)\n\t\t *     already handle this.\n\t\t * <li> {@link FancytreeNode#renderTitle} and {@link FancytreeNode#renderStatus}\n\t\t *     are implied. If changes are more local, calling only renderTitle() or\n\t\t *     renderStatus() may be sufficient and faster.\n\t\t * </ul>\n\t\t *\n\t\t * @param {boolean} [force=false] re-render, even if html markup was already created\n\t\t * @param {boolean} [deep=false] also render all descendants, even if parent is collapsed\n\t\t */\n\t\trender: function (force, deep) {\n\t\t\treturn this.tree._callHook(\"nodeRender\", this, force, deep);\n\t\t},\n\t\t/** Create HTML markup for the node's outer `<span>` (expander, checkbox, icon, and title).\n\t\t * Implies {@link FancytreeNode#renderStatus}.\n\t\t * @see Fancytree_Hooks#nodeRenderTitle\n\t\t */\n\t\trenderTitle: function () {\n\t\t\treturn this.tree._callHook(\"nodeRenderTitle\", this);\n\t\t},\n\t\t/** Update element's CSS classes according to node state.\n\t\t * @see Fancytree_Hooks#nodeRenderStatus\n\t\t */\n\t\trenderStatus: function () {\n\t\t\treturn this.tree._callHook(\"nodeRenderStatus\", this);\n\t\t},\n\t\t/**\n\t\t * (experimental) Replace this node with `source`.\n\t\t * (Currently only available for paging nodes.)\n\t\t * @param {NodeData[]} source List of child node definitions\n\t\t * @since 2.15\n\t\t */\n\t\treplaceWith: function (source) {\n\t\t\tvar res,\n\t\t\t\tparent = this.parent,\n\t\t\t\tpos = $.inArray(this, parent.children),\n\t\t\t\tself = this;\n\n\t\t\t_assert(\n\t\t\t\tthis.isPagingNode(),\n\t\t\t\t\"replaceWith() currently requires a paging status node\"\n\t\t\t);\n\n\t\t\tres = this.tree._callHook(\"nodeLoadChildren\", this, source);\n\t\t\tres.done(function (data) {\n\t\t\t\t// New nodes are currently children of `this`.\n\t\t\t\tvar children = self.children;\n\t\t\t\t// Prepend newly loaded child nodes to `this`\n\t\t\t\t// Move new children after self\n\t\t\t\tfor (i = 0; i < children.length; i++) {\n\t\t\t\t\tchildren[i].parent = parent;\n\t\t\t\t}\n\t\t\t\tparent.children.splice.apply(\n\t\t\t\t\tparent.children,\n\t\t\t\t\t[pos + 1, 0].concat(children)\n\t\t\t\t);\n\n\t\t\t\t// Remove self\n\t\t\t\tself.children = null;\n\t\t\t\tself.remove();\n\t\t\t\t// Redraw new nodes\n\t\t\t\tparent.render();\n\t\t\t\t// TODO: set node.partload = false if this was tha last paging node?\n\t\t\t\t// parent.addPagingNode(false);\n\t\t\t}).fail(function () {\n\t\t\t\tself.setExpanded();\n\t\t\t});\n\t\t\treturn res;\n\t\t\t// $.error(\"Not implemented: replaceWith()\");\n\t\t},\n\t\t/**\n\t\t * Remove all children, collapse, and set the lazy-flag, so that the lazyLoad\n\t\t * event is triggered on next expand.\n\t\t */\n\t\tresetLazy: function () {\n\t\t\tthis.removeChildren();\n\t\t\tthis.expanded = false;\n\t\t\tthis.lazy = true;\n\t\t\tthis.children = undefined;\n\t\t\tthis.renderStatus();\n\t\t},\n\t\t/** Schedule activity for delayed execution (cancel any pending request).\n\t\t *  scheduleAction('cancel') will only cancel a pending request (if any).\n\t\t * @param {string} mode\n\t\t * @param {number} ms\n\t\t */\n\t\tscheduleAction: function (mode, ms) {\n\t\t\tif (this.tree.timer) {\n\t\t\t\tclearTimeout(this.tree.timer);\n\t\t\t\tthis.tree.debug(\"clearTimeout(%o)\", this.tree.timer);\n\t\t\t}\n\t\t\tthis.tree.timer = null;\n\t\t\tvar self = this; // required for closures\n\t\t\tswitch (mode) {\n\t\t\t\tcase \"cancel\":\n\t\t\t\t\t// Simply made sure that timer was cleared\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"expand\":\n\t\t\t\t\tthis.tree.timer = setTimeout(function () {\n\t\t\t\t\t\tself.tree.debug(\"setTimeout: trigger expand\");\n\t\t\t\t\t\tself.setExpanded(true);\n\t\t\t\t\t}, ms);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"activate\":\n\t\t\t\t\tthis.tree.timer = setTimeout(function () {\n\t\t\t\t\t\tself.tree.debug(\"setTimeout: trigger activate\");\n\t\t\t\t\t\tself.setActive(true);\n\t\t\t\t\t}, ms);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t$.error(\"Invalid mode \" + mode);\n\t\t\t}\n\t\t\t// this.tree.debug(\"setTimeout(%s, %s): %s\", mode, ms, this.tree.timer);\n\t\t},\n\t\t/**\n\t\t *\n\t\t * @param {boolean | PlainObject} [effects=false] animation options.\n\t\t * @param {object} [options=null] {topNode: null, effects: ..., parent: ...} this node will remain visible in\n\t\t *     any case, even if `this` is outside the scroll pane.\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tscrollIntoView: function (effects, options) {\n\t\t\tif (options !== undefined && _isNode(options)) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t\"scrollIntoView() with 'topNode' option is deprecated since 2014-05-08. Use 'options.topNode' instead.\"\n\t\t\t\t);\n\t\t\t}\n\t\t\t// The scroll parent is typically the plain tree's <UL> container.\n\t\t\t// For ext-table, we choose the nearest parent that has `position: relative`\n\t\t\t// and `overflow` set.\n\t\t\t// (This default can be overridden by the local or global `scrollParent` option.)\n\t\t\tvar opts = $.extend(\n\t\t\t\t\t{\n\t\t\t\t\t\teffects:\n\t\t\t\t\t\t\teffects === true\n\t\t\t\t\t\t\t\t? { duration: 200, queue: false }\n\t\t\t\t\t\t\t\t: effects,\n\t\t\t\t\t\tscrollOfs: this.tree.options.scrollOfs,\n\t\t\t\t\t\tscrollParent: this.tree.options.scrollParent,\n\t\t\t\t\t\ttopNode: null,\n\t\t\t\t\t},\n\t\t\t\t\toptions\n\t\t\t\t),\n\t\t\t\t$scrollParent = opts.scrollParent,\n\t\t\t\t$container = this.tree.$container,\n\t\t\t\toverflowY = $container.css(\"overflow-y\");\n\n\t\t\tif (!$scrollParent) {\n\t\t\t\tif (this.tree.tbody) {\n\t\t\t\t\t$scrollParent = $container.scrollParent();\n\t\t\t\t} else if (overflowY === \"scroll\" || overflowY === \"auto\") {\n\t\t\t\t\t$scrollParent = $container;\n\t\t\t\t} else {\n\t\t\t\t\t// #922 plain tree in a non-fixed-sized UL scrolls inside its parent\n\t\t\t\t\t$scrollParent = $container.scrollParent();\n\t\t\t\t}\n\t\t\t} else if (!$scrollParent.jquery) {\n\t\t\t\t// Make sure we have a jQuery object\n\t\t\t\t$scrollParent = $($scrollParent);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t$scrollParent[0] === document ||\n\t\t\t\t$scrollParent[0] === document.body\n\t\t\t) {\n\t\t\t\t// `document` may be returned by $().scrollParent(), if nothing is found,\n\t\t\t\t// but would not work: (see #894)\n\t\t\t\tthis.debug(\n\t\t\t\t\t\"scrollIntoView(): normalizing scrollParent to 'window':\",\n\t\t\t\t\t$scrollParent[0]\n\t\t\t\t);\n\t\t\t\t$scrollParent = $(window);\n\t\t\t}\n\t\t\t// eslint-disable-next-line one-var\n\t\t\tvar topNodeY,\n\t\t\t\tnodeY,\n\t\t\t\thorzScrollbarHeight,\n\t\t\t\tcontainerOffsetTop,\n\t\t\t\tdfd = new $.Deferred(),\n\t\t\t\tself = this,\n\t\t\t\tnodeHeight = $(this.span).height(),\n\t\t\t\ttopOfs = opts.scrollOfs.top || 0,\n\t\t\t\tbottomOfs = opts.scrollOfs.bottom || 0,\n\t\t\t\tcontainerHeight = $scrollParent.height(),\n\t\t\t\tscrollTop = $scrollParent.scrollTop(),\n\t\t\t\t$animateTarget = $scrollParent,\n\t\t\t\tisParentWindow = $scrollParent[0] === window,\n\t\t\t\ttopNode = opts.topNode || null,\n\t\t\t\tnewScrollTop = null;\n\n\t\t\t// this.debug(\"scrollIntoView(), scrollTop=\" + scrollTop, opts.scrollOfs);\n\t\t\t// _assert($(this.span).is(\":visible\"), \"scrollIntoView node is invisible\"); // otherwise we cannot calc offsets\n\t\t\tif (this.isRootNode() || !this.isVisible()) {\n\t\t\t\t// We cannot calc offsets for hidden elements\n\t\t\t\tthis.info(\"scrollIntoView(): node is invisible.\");\n\t\t\t\treturn _getResolvedPromise();\n\t\t\t}\n\t\t\tif (isParentWindow) {\n\t\t\t\tnodeY = $(this.span).offset().top;\n\t\t\t\ttopNodeY =\n\t\t\t\t\ttopNode && topNode.span ? $(topNode.span).offset().top : 0;\n\t\t\t\t$animateTarget = $(\"html,body\");\n\t\t\t} else {\n\t\t\t\t_assert(\n\t\t\t\t\t$scrollParent[0] !== document &&\n\t\t\t\t\t\t$scrollParent[0] !== document.body,\n\t\t\t\t\t\"scrollParent should be a simple element or `window`, not document or body.\"\n\t\t\t\t);\n\n\t\t\t\tcontainerOffsetTop = $scrollParent.offset().top;\n\t\t\t\tnodeY =\n\t\t\t\t\t$(this.span).offset().top - containerOffsetTop + scrollTop; // relative to scroll parent\n\t\t\t\ttopNodeY = topNode\n\t\t\t\t\t? $(topNode.span).offset().top -\n\t\t\t\t\t  containerOffsetTop +\n\t\t\t\t\t  scrollTop\n\t\t\t\t\t: 0;\n\t\t\t\thorzScrollbarHeight = Math.max(\n\t\t\t\t\t0,\n\t\t\t\t\t$scrollParent.innerHeight() - $scrollParent[0].clientHeight\n\t\t\t\t);\n\t\t\t\tcontainerHeight -= horzScrollbarHeight;\n\t\t\t}\n\n\t\t\t// this.debug(\"    scrollIntoView(), nodeY=\" + nodeY + \", containerHeight=\" + containerHeight);\n\t\t\tif (nodeY < scrollTop + topOfs) {\n\t\t\t\t// Node is above visible container area\n\t\t\t\tnewScrollTop = nodeY - topOfs;\n\t\t\t\t// this.debug(\"    scrollIntoView(), UPPER newScrollTop=\" + newScrollTop);\n\t\t\t} else if (\n\t\t\t\tnodeY + nodeHeight >\n\t\t\t\tscrollTop + containerHeight - bottomOfs\n\t\t\t) {\n\t\t\t\tnewScrollTop = nodeY + nodeHeight - containerHeight + bottomOfs;\n\t\t\t\t// this.debug(\"    scrollIntoView(), LOWER newScrollTop=\" + newScrollTop);\n\t\t\t\t// If a topNode was passed, make sure that it is never scrolled\n\t\t\t\t// outside the upper border\n\t\t\t\tif (topNode) {\n\t\t\t\t\t_assert(\n\t\t\t\t\t\ttopNode.isRootNode() || topNode.isVisible(),\n\t\t\t\t\t\t\"topNode must be visible\"\n\t\t\t\t\t);\n\t\t\t\t\tif (topNodeY < newScrollTop) {\n\t\t\t\t\t\tnewScrollTop = topNodeY - topOfs;\n\t\t\t\t\t\t// this.debug(\"    scrollIntoView(), TOP newScrollTop=\" + newScrollTop);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newScrollTop === null) {\n\t\t\t\tdfd.resolveWith(this);\n\t\t\t} else {\n\t\t\t\t// this.debug(\"    scrollIntoView(), SET newScrollTop=\" + newScrollTop);\n\t\t\t\tif (opts.effects) {\n\t\t\t\t\topts.effects.complete = function () {\n\t\t\t\t\t\tdfd.resolveWith(self);\n\t\t\t\t\t};\n\t\t\t\t\t$animateTarget.stop(true).animate(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tscrollTop: newScrollTop,\n\t\t\t\t\t\t},\n\t\t\t\t\t\topts.effects\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t$animateTarget[0].scrollTop = newScrollTop;\n\t\t\t\t\tdfd.resolveWith(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dfd.promise();\n\t\t},\n\n\t\t/**Activate this node.\n\t\t *\n\t\t * The `cell` option requires the ext-table and ext-ariagrid extensions.\n\t\t *\n\t\t * @param {boolean} [flag=true] pass false to deactivate\n\t\t * @param {object} [opts] additional options. Defaults to {noEvents: false, noFocus: false, cell: null}\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tsetActive: function (flag, opts) {\n\t\t\treturn this.tree._callHook(\"nodeSetActive\", this, flag, opts);\n\t\t},\n\t\t/**Expand or collapse this node. Promise is resolved, when lazy loading and animations are done.\n\t\t * @param {boolean} [flag=true] pass false to collapse\n\t\t * @param {object} [opts] additional options. Defaults to {noAnimation: false, noEvents: false}\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tsetExpanded: function (flag, opts) {\n\t\t\treturn this.tree._callHook(\"nodeSetExpanded\", this, flag, opts);\n\t\t},\n\t\t/**Set keyboard focus to this node.\n\t\t * @param {boolean} [flag=true] pass false to blur\n\t\t * @see Fancytree#setFocus\n\t\t */\n\t\tsetFocus: function (flag) {\n\t\t\treturn this.tree._callHook(\"nodeSetFocus\", this, flag);\n\t\t},\n\t\t/**Select this node, i.e. check the checkbox.\n\t\t * @param {boolean} [flag=true] pass false to deselect\n\t\t * @param {object} [opts] additional options. Defaults to {noEvents: false, p\n\t\t *     propagateDown: null, propagateUp: null, callback: null }\n\t\t */\n\t\tsetSelected: function (flag, opts) {\n\t\t\treturn this.tree._callHook(\"nodeSetSelected\", this, flag, opts);\n\t\t},\n\t\t/**Mark a lazy node as 'error', 'loading', 'nodata', or 'ok'.\n\t\t * @param {string} status 'error'|'loading'|'nodata'|'ok'\n\t\t * @param {string} [message]\n\t\t * @param {string} [details]\n\t\t */\n\t\tsetStatus: function (status, message, details) {\n\t\t\treturn this.tree._callHook(\n\t\t\t\t\"nodeSetStatus\",\n\t\t\t\tthis,\n\t\t\t\tstatus,\n\t\t\t\tmessage,\n\t\t\t\tdetails\n\t\t\t);\n\t\t},\n\t\t/**Rename this node.\n\t\t * @param {string} title\n\t\t */\n\t\tsetTitle: function (title) {\n\t\t\tthis.title = title;\n\t\t\tthis.renderTitle();\n\t\t\tthis.triggerModify(\"rename\");\n\t\t},\n\t\t/**Sort child list by title.\n\t\t * @param {function} [cmp] custom compare function(a, b) that returns -1, 0, or 1 (defaults to sort by title).\n\t\t * @param {boolean} [deep=false] pass true to sort all descendant nodes\n\t\t */\n\t\tsortChildren: function (cmp, deep) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tcl = this.children;\n\n\t\t\tif (!cl) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcmp =\n\t\t\t\tcmp ||\n\t\t\t\tfunction (a, b) {\n\t\t\t\t\tvar x = a.title.toLowerCase(),\n\t\t\t\t\t\ty = b.title.toLowerCase();\n\n\t\t\t\t\t// eslint-disable-next-line no-nested-ternary\n\t\t\t\t\treturn x === y ? 0 : x > y ? 1 : -1;\n\t\t\t\t};\n\t\t\tcl.sort(cmp);\n\t\t\tif (deep) {\n\t\t\t\tfor (i = 0, l = cl.length; i < l; i++) {\n\t\t\t\t\tif (cl[i].children) {\n\t\t\t\t\t\tcl[i].sortChildren(cmp, \"$norender$\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (deep !== \"$norender$\") {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t\tthis.triggerModifyChild(\"sort\");\n\t\t},\n\t\t/** Convert node (or whole branch) into a plain object.\n\t\t *\n\t\t * The result is compatible with node.addChildren().\n\t\t *\n\t\t * @param {boolean} [recursive=false] include child nodes\n\t\t * @param {function} [callback] callback(dict, node) is called for every node, in order to allow modifications.\n\t\t *     Return `false` to ignore this node or `\"skip\"` to include this node without its children.\n\t\t * @returns {NodeData}\n\t\t */\n\t\ttoDict: function (recursive, callback) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tnode,\n\t\t\t\tres,\n\t\t\t\tdict = {},\n\t\t\t\tself = this;\n\n\t\t\t$.each(NODE_ATTRS, function (i, a) {\n\t\t\t\tif (self[a] || self[a] === false) {\n\t\t\t\t\tdict[a] = self[a];\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!$.isEmptyObject(this.data)) {\n\t\t\t\tdict.data = $.extend({}, this.data);\n\t\t\t\tif ($.isEmptyObject(dict.data)) {\n\t\t\t\t\tdelete dict.data;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (callback) {\n\t\t\t\tres = callback(dict, self);\n\t\t\t\tif (res === false) {\n\t\t\t\t\treturn false; // Don't include this node nor its children\n\t\t\t\t}\n\t\t\t\tif (res === \"skip\") {\n\t\t\t\t\trecursive = false; // Include this node, but not the children\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (recursive) {\n\t\t\t\tif (_isArray(this.children)) {\n\t\t\t\t\tdict.children = [];\n\t\t\t\t\tfor (i = 0, l = this.children.length; i < l; i++) {\n\t\t\t\t\t\tnode = this.children[i];\n\t\t\t\t\t\tif (!node.isStatusNode()) {\n\t\t\t\t\t\t\tres = node.toDict(true, callback);\n\t\t\t\t\t\t\tif (res !== false) {\n\t\t\t\t\t\t\t\tdict.children.push(res);\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\t\t\treturn dict;\n\t\t},\n\t\t/**\n\t\t * Set, clear, or toggle class of node's span tag and .extraClasses.\n\t\t *\n\t\t * @param {string} className class name (separate multiple classes by space)\n\t\t * @param {boolean} [flag] true/false to add/remove class. If omitted, class is toggled.\n\t\t * @returns {boolean} true if a class was added\n\t\t *\n\t\t * @since 2.17\n\t\t */\n\t\ttoggleClass: function (value, flag) {\n\t\t\tvar className,\n\t\t\t\thasClass,\n\t\t\t\trnotwhite = /\\S+/g,\n\t\t\t\tclassNames = value.match(rnotwhite) || [],\n\t\t\t\ti = 0,\n\t\t\t\twasAdded = false,\n\t\t\t\tstatusElem = this[this.tree.statusClassPropName],\n\t\t\t\tcurClasses = \" \" + (this.extraClasses || \"\") + \" \";\n\n\t\t\t// this.info(\"toggleClass('\" + value + \"', \" + flag + \")\", curClasses);\n\t\t\t// Modify DOM element directly if it already exists\n\t\t\tif (statusElem) {\n\t\t\t\t$(statusElem).toggleClass(value, flag);\n\t\t\t}\n\t\t\t// Modify node.extraClasses to make this change persistent\n\t\t\t// Toggle if flag was not passed\n\t\t\twhile ((className = classNames[i++])) {\n\t\t\t\thasClass = curClasses.indexOf(\" \" + className + \" \") >= 0;\n\t\t\t\tflag = flag === undefined ? !hasClass : !!flag;\n\t\t\t\tif (flag) {\n\t\t\t\t\tif (!hasClass) {\n\t\t\t\t\t\tcurClasses += className + \" \";\n\t\t\t\t\t\twasAdded = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twhile (curClasses.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\tcurClasses = curClasses.replace(\n\t\t\t\t\t\t\t\" \" + className + \" \",\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\t\t\tthis.extraClasses = _trim(curClasses);\n\t\t\t// this.info(\"-> toggleClass('\" + value + \"', \" + flag + \"): '\" + this.extraClasses + \"'\");\n\t\t\treturn wasAdded;\n\t\t},\n\t\t/** Flip expanded status. */\n\t\ttoggleExpanded: function () {\n\t\t\treturn this.tree._callHook(\"nodeToggleExpanded\", this);\n\t\t},\n\t\t/** Flip selection status. */\n\t\ttoggleSelected: function () {\n\t\t\treturn this.tree._callHook(\"nodeToggleSelected\", this);\n\t\t},\n\t\ttoString: function () {\n\t\t\treturn \"FancytreeNode@\" + this.key + \"[title='\" + this.title + \"']\";\n\t\t\t// return \"<FancytreeNode(#\" + this.key + \", '\" + this.title + \"')>\";\n\t\t},\n\t\t/**\n\t\t * Trigger `modifyChild` event on a parent to signal that a child was modified.\n\t\t * @param {string} operation Type of change: 'add', 'remove', 'rename', 'move', 'data', ...\n\t\t * @param {FancytreeNode} [childNode]\n\t\t * @param {object} [extra]\n\t\t */\n\t\ttriggerModifyChild: function (operation, childNode, extra) {\n\t\t\tvar data,\n\t\t\t\tmodifyChild = this.tree.options.modifyChild;\n\n\t\t\tif (modifyChild) {\n\t\t\t\tif (childNode && childNode.parent !== this) {\n\t\t\t\t\t$.error(\n\t\t\t\t\t\t\"childNode \" + childNode + \" is not a child of \" + this\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdata = {\n\t\t\t\t\tnode: this,\n\t\t\t\t\ttree: this.tree,\n\t\t\t\t\toperation: operation,\n\t\t\t\t\tchildNode: childNode || null,\n\t\t\t\t};\n\t\t\t\tif (extra) {\n\t\t\t\t\t$.extend(data, extra);\n\t\t\t\t}\n\t\t\t\tmodifyChild({ type: \"modifyChild\" }, data);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Trigger `modifyChild` event on node.parent(!).\n\t\t * @param {string} operation Type of change: 'add', 'remove', 'rename', 'move', 'data', ...\n\t\t * @param {object} [extra]\n\t\t */\n\t\ttriggerModify: function (operation, extra) {\n\t\t\tthis.parent.triggerModifyChild(operation, this, extra);\n\t\t},\n\t\t/** Call fn(node) for all child nodes in hierarchical order (depth-first).<br>\n\t\t * Stop iteration, if fn() returns false. Skip current branch, if fn() returns \"skip\".<br>\n\t\t * Return false if iteration was stopped.\n\t\t *\n\t\t * @param {function} fn the callback function.\n\t\t *     Return false to stop iteration, return \"skip\" to skip this node and\n\t\t *     its children only.\n\t\t * @param {boolean} [includeSelf=false]\n\t\t * @returns {boolean}\n\t\t */\n\t\tvisit: function (fn, includeSelf) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tres = true,\n\t\t\t\tchildren = this.children;\n\n\t\t\tif (includeSelf === true) {\n\t\t\t\tres = fn(this);\n\t\t\t\tif (res === false || res === \"skip\") {\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (children) {\n\t\t\t\tfor (i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tres = children[i].visit(fn, true);\n\t\t\t\t\tif (res === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t/** Call fn(node) for all child nodes and recursively load lazy children.<br>\n\t\t * <b>Note:</b> If you need this method, you probably should consider to review\n\t\t * your architecture! Recursivley loading nodes is a perfect way for lazy\n\t\t * programmers to flood the server with requests ;-)\n\t\t *\n\t\t * @param {function} [fn] optional callback function.\n\t\t *     Return false to stop iteration, return \"skip\" to skip this node and\n\t\t *     its children only.\n\t\t * @param {boolean} [includeSelf=false]\n\t\t * @returns {$.Promise}\n\t\t * @since 2.4\n\t\t */\n\t\tvisitAndLoad: function (fn, includeSelf, _recursion) {\n\t\t\tvar dfd,\n\t\t\t\tres,\n\t\t\t\tloaders,\n\t\t\t\tnode = this;\n\n\t\t\t// node.debug(\"visitAndLoad\");\n\t\t\tif (fn && includeSelf === true) {\n\t\t\t\tres = fn(node);\n\t\t\t\tif (res === false || res === \"skip\") {\n\t\t\t\t\treturn _recursion ? res : _getResolvedPromise();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!node.children && !node.lazy) {\n\t\t\t\treturn _getResolvedPromise();\n\t\t\t}\n\t\t\tdfd = new $.Deferred();\n\t\t\tloaders = [];\n\t\t\t// node.debug(\"load()...\");\n\t\t\tnode.load().done(function () {\n\t\t\t\t// node.debug(\"load()... done.\");\n\t\t\t\tfor (var i = 0, l = node.children.length; i < l; i++) {\n\t\t\t\t\tres = node.children[i].visitAndLoad(fn, true, true);\n\t\t\t\t\tif (res === false) {\n\t\t\t\t\t\tdfd.reject();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (res !== \"skip\") {\n\t\t\t\t\t\tloaders.push(res); // Add promise to the list\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$.when.apply(this, loaders).then(function () {\n\t\t\t\t\tdfd.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn dfd.promise();\n\t\t},\n\t\t/** Call fn(node) for all parent nodes, bottom-up, including invisible system root.<br>\n\t\t * Stop iteration, if fn() returns false.<br>\n\t\t * Return false if iteration was stopped.\n\t\t *\n\t\t * @param {function} fn the callback function.\n\t\t *     Return false to stop iteration, return \"skip\" to skip this node and children only.\n\t\t * @param {boolean} [includeSelf=false]\n\t\t * @returns {boolean}\n\t\t */\n\t\tvisitParents: function (fn, includeSelf) {\n\t\t\t// Visit parent nodes (bottom up)\n\t\t\tif (includeSelf && fn(this) === false) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar p = this.parent;\n\t\t\twhile (p) {\n\t\t\t\tif (fn(p) === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tp = p.parent;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/** Call fn(node) for all sibling nodes.<br>\n\t\t * Stop iteration, if fn() returns false.<br>\n\t\t * Return false if iteration was stopped.\n\t\t *\n\t\t * @param {function} fn the callback function.\n\t\t *     Return false to stop iteration.\n\t\t * @param {boolean} [includeSelf=false]\n\t\t * @returns {boolean}\n\t\t */\n\t\tvisitSiblings: function (fn, includeSelf) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tn,\n\t\t\t\tac = this.parent.children;\n\n\t\t\tfor (i = 0, l = ac.length; i < l; i++) {\n\t\t\t\tn = ac[i];\n\t\t\t\tif (includeSelf || n !== this) {\n\t\t\t\t\tif (fn(n) === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/** Write warning to browser console if debugLevel >= 2 (prepending node info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\twarn: function (msg) {\n\t\t\tif (this.tree.options.debugLevel >= 2) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"warn\", arguments);\n\t\t\t}\n\t\t},\n\t};\n\n\t/******************************************************************************\n\t * Fancytree\n\t */\n\t/**\n\t * Construct a new tree object.\n\t *\n\t * @class Fancytree\n\t * @classdesc The controller behind a fancytree.\n\t * This class also contains 'hook methods': see {@link Fancytree_Hooks}.\n\t *\n\t * @param {Widget} widget\n\t *\n\t * @property {string} _id Automatically generated unique tree instance ID, e.g. \"1\".\n\t * @property {string} _ns Automatically generated unique tree namespace, e.g. \".fancytree-1\".\n\t * @property {FancytreeNode} activeNode Currently active node or null.\n\t * @property {string} ariaPropName Property name of FancytreeNode that contains the element which will receive the aria attributes.\n\t *     Typically \"li\", but \"tr\" for table extension.\n\t * @property {jQueryObject} $container Outer `<ul>` element (or `<table>` element for ext-table).\n\t * @property {jQueryObject} $div A jQuery object containing the element used to instantiate the tree widget (`widget.element`)\n\t * @property {object|array} columns Recommended place to store shared column meta data. @since 2.27\n\t * @property {object} data Metadata, i.e. properties that may be passed to `source` in addition to a children array.\n\t * @property {object} ext Hash of all active plugin instances.\n\t * @property {FancytreeNode} focusNode Currently focused node or null.\n\t * @property {FancytreeNode} lastSelectedNode Used to implement selectMode 1 (single select)\n\t * @property {string} nodeContainerAttrName Property name of FancytreeNode that contains the outer element of single nodes.\n\t *     Typically \"li\", but \"tr\" for table extension.\n\t * @property {FancytreeOptions} options Current options, i.e. default options + options passed to constructor.\n\t * @property {FancytreeNode} rootNode Invisible system root node.\n\t * @property {string} statusClassPropName Property name of FancytreeNode that contains the element which will receive the status classes.\n\t *     Typically \"span\", but \"tr\" for table extension.\n\t * @property {object} types Map for shared type specific meta data, used with node.type attribute. @since 2.27\n\t * @property {object} viewport See ext-vieport. @since v2.31\n\t * @property {object} widget Base widget instance.\n\t */\n\tfunction Fancytree(widget) {\n\t\tthis.widget = widget;\n\t\tthis.$div = widget.element;\n\t\tthis.options = widget.options;\n\t\tif (this.options) {\n\t\t\tif (this.options.lazyload !== undefined) {\n\t\t\t\t$.error(\n\t\t\t\t\t\"The 'lazyload' event is deprecated since 2014-02-25. Use 'lazyLoad' (with uppercase L) instead.\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.options.loaderror !== undefined) {\n\t\t\t\t$.error(\n\t\t\t\t\t\"The 'loaderror' event was renamed since 2014-07-03. Use 'loadError' (with uppercase E) instead.\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.options.fx !== undefined) {\n\t\t\t\t$.error(\n\t\t\t\t\t\"The 'fx' option was replaced by 'toggleEffect' since 2014-11-30.\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.options.removeNode !== undefined) {\n\t\t\t\t$.error(\n\t\t\t\t\t\"The 'removeNode' event was replaced by 'modifyChild' since 2.20 (2016-09-10).\"\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tthis.ext = {}; // Active extension instances\n\t\tthis.types = {};\n\t\tthis.columns = {};\n\t\t// allow to init tree.data.foo from <div data-foo=''>\n\t\tthis.data = _getElementDataAsDict(this.$div);\n\t\t// TODO: use widget.uuid instead?\n\t\tthis._id = \"\" + (this.options.treeId || $.ui.fancytree._nextId++);\n\t\t// TODO: use widget.eventNamespace instead?\n\t\tthis._ns = \".fancytree-\" + this._id; // append for namespaced events\n\t\tthis.activeNode = null;\n\t\tthis.focusNode = null;\n\t\tthis._hasFocus = null;\n\t\tthis._tempCache = {};\n\t\tthis._lastMousedownNode = null;\n\t\tthis._enableUpdate = true;\n\t\tthis.lastSelectedNode = null;\n\t\tthis.systemFocusElement = null;\n\t\tthis.lastQuicksearchTerm = \"\";\n\t\tthis.lastQuicksearchTime = 0;\n\t\tthis.viewport = null; // ext-grid\n\n\t\tthis.statusClassPropName = \"span\";\n\t\tthis.ariaPropName = \"li\";\n\t\tthis.nodeContainerAttrName = \"li\";\n\n\t\t// Remove previous markup if any\n\t\tthis.$div.find(\">ul.fancytree-container\").remove();\n\n\t\t// Create a node without parent.\n\t\tvar fakeParent = { tree: this },\n\t\t\t$ul;\n\t\tthis.rootNode = new FancytreeNode(fakeParent, {\n\t\t\ttitle: \"root\",\n\t\t\tkey: \"root_\" + this._id,\n\t\t\tchildren: null,\n\t\t\texpanded: true,\n\t\t});\n\t\tthis.rootNode.parent = null;\n\n\t\t// Create root markup\n\t\t$ul = $(\"<ul>\", {\n\t\t\tid: \"ft-id-\" + this._id,\n\t\t\tclass: \"ui-fancytree fancytree-container fancytree-plain\",\n\t\t}).appendTo(this.$div);\n\t\tthis.$container = $ul;\n\t\tthis.rootNode.ul = $ul[0];\n\n\t\tif (this.options.debugLevel == null) {\n\t\t\tthis.options.debugLevel = FT.debugLevel;\n\t\t}\n\t\t// // Add container to the TAB chain\n\t\t// // See http://www.w3.org/TR/wai-aria-practices/#focus_activedescendant\n\t\t// // #577: Allow to set tabindex to \"0\", \"-1\" and \"\"\n\t\t// this.$container.attr(\"tabindex\", this.options.tabindex);\n\n\t\t// if( this.options.rtl ) {\n\t\t// \tthis.$container.attr(\"DIR\", \"RTL\").addClass(\"fancytree-rtl\");\n\t\t// // }else{\n\t\t// //\tthis.$container.attr(\"DIR\", null).removeClass(\"fancytree-rtl\");\n\t\t// }\n\t\t// if(this.options.aria){\n\t\t// \tthis.$container.attr(\"role\", \"tree\");\n\t\t// \tif( this.options.selectMode !== 1 ) {\n\t\t// \t\tthis.$container.attr(\"aria-multiselectable\", true);\n\t\t// \t}\n\t\t// }\n\t}\n\n\tFancytree.prototype = /** @lends Fancytree# */ {\n\t\t/* Return a context object that can be re-used for _callHook().\n\t\t * @param {Fancytree | FancytreeNode | EventData} obj\n\t\t * @param {Event} originalEvent\n\t\t * @param {Object} extra\n\t\t * @returns {EventData}\n\t\t */\n\t\t_makeHookContext: function (obj, originalEvent, extra) {\n\t\t\tvar ctx, tree;\n\t\t\tif (obj.node !== undefined) {\n\t\t\t\t// obj is already a context object\n\t\t\t\tif (originalEvent && obj.originalEvent !== originalEvent) {\n\t\t\t\t\t$.error(\"invalid args\");\n\t\t\t\t}\n\t\t\t\tctx = obj;\n\t\t\t} else if (obj.tree) {\n\t\t\t\t// obj is a FancytreeNode\n\t\t\t\ttree = obj.tree;\n\t\t\t\tctx = {\n\t\t\t\t\tnode: obj,\n\t\t\t\t\ttree: tree,\n\t\t\t\t\twidget: tree.widget,\n\t\t\t\t\toptions: tree.widget.options,\n\t\t\t\t\toriginalEvent: originalEvent,\n\t\t\t\t\ttypeInfo: tree.types[obj.type] || {},\n\t\t\t\t};\n\t\t\t} else if (obj.widget) {\n\t\t\t\t// obj is a Fancytree\n\t\t\t\tctx = {\n\t\t\t\t\tnode: null,\n\t\t\t\t\ttree: obj,\n\t\t\t\t\twidget: obj.widget,\n\t\t\t\t\toptions: obj.widget.options,\n\t\t\t\t\toriginalEvent: originalEvent,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t$.error(\"invalid args\");\n\t\t\t}\n\t\t\tif (extra) {\n\t\t\t\t$.extend(ctx, extra);\n\t\t\t}\n\t\t\treturn ctx;\n\t\t},\n\t\t/* Trigger a hook function: funcName(ctx, [...]).\n\t\t *\n\t\t * @param {string} funcName\n\t\t * @param {Fancytree|FancytreeNode|EventData} contextObject\n\t\t * @param {any}  [_extraArgs] optional additional arguments\n\t\t * @returns {any}\n\t\t */\n\t\t_callHook: function (funcName, contextObject, _extraArgs) {\n\t\t\tvar ctx = this._makeHookContext(contextObject),\n\t\t\t\tfn = this[funcName],\n\t\t\t\targs = Array.prototype.slice.call(arguments, 2);\n\t\t\tif (!_isFunction(fn)) {\n\t\t\t\t$.error(\"_callHook('\" + funcName + \"') is not a function\");\n\t\t\t}\n\t\t\targs.unshift(ctx);\n\t\t\t// this.debug(\"_hook\", funcName, ctx.node && ctx.node.toString() || ctx.tree.toString(), args);\n\t\t\treturn fn.apply(this, args);\n\t\t},\n\t\t_setExpiringValue: function (key, value, ms) {\n\t\t\tthis._tempCache[key] = {\n\t\t\t\tvalue: value,\n\t\t\t\texpire: Date.now() + (+ms || 50),\n\t\t\t};\n\t\t},\n\t\t_getExpiringValue: function (key) {\n\t\t\tvar entry = this._tempCache[key];\n\t\t\tif (entry && entry.expire > Date.now()) {\n\t\t\t\treturn entry.value;\n\t\t\t}\n\t\t\tdelete this._tempCache[key];\n\t\t\treturn null;\n\t\t},\n\t\t/* Check if this tree has extension `name` enabled.\n\t\t *\n\t\t * @param {string} name name of the required extension\n\t\t */\n\t\t_usesExtension: function (name) {\n\t\t\treturn $.inArray(name, this.options.extensions) >= 0;\n\t\t},\n\t\t/* Check if current extensions dependencies are met and throw an error if not.\n\t\t *\n\t\t * This method may be called inside the `treeInit` hook for custom extensions.\n\t\t *\n\t\t * @param {string} name name of the required extension\n\t\t * @param {boolean} [required=true] pass `false` if the extension is optional, but we want to check for order if it is present\n\t\t * @param {boolean} [before] `true` if `name` must be included before this, `false` otherwise (use `null` if order doesn't matter)\n\t\t * @param {string} [message] optional error message (defaults to a descriptve error message)\n\t\t */\n\t\t_requireExtension: function (name, required, before, message) {\n\t\t\tif (before != null) {\n\t\t\t\tbefore = !!before;\n\t\t\t}\n\t\t\tvar thisName = this._local.name,\n\t\t\t\textList = this.options.extensions,\n\t\t\t\tisBefore =\n\t\t\t\t\t$.inArray(name, extList) < $.inArray(thisName, extList),\n\t\t\t\tisMissing = required && this.ext[name] == null,\n\t\t\t\tbadOrder = !isMissing && before != null && before !== isBefore;\n\n\t\t\t_assert(\n\t\t\t\tthisName && thisName !== name,\n\t\t\t\t\"invalid or same name '\" + thisName + \"' (require yourself?)\"\n\t\t\t);\n\n\t\t\tif (isMissing || badOrder) {\n\t\t\t\tif (!message) {\n\t\t\t\t\tif (isMissing || required) {\n\t\t\t\t\t\tmessage =\n\t\t\t\t\t\t\t\"'\" +\n\t\t\t\t\t\t\tthisName +\n\t\t\t\t\t\t\t\"' extension requires '\" +\n\t\t\t\t\t\t\tname +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t\tif (badOrder) {\n\t\t\t\t\t\t\tmessage +=\n\t\t\t\t\t\t\t\t\" to be registered \" +\n\t\t\t\t\t\t\t\t(before ? \"before\" : \"after\") +\n\t\t\t\t\t\t\t\t\" itself\";\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmessage =\n\t\t\t\t\t\t\t\"If used together, `\" +\n\t\t\t\t\t\t\tname +\n\t\t\t\t\t\t\t\"` must be registered \" +\n\t\t\t\t\t\t\t(before ? \"before\" : \"after\") +\n\t\t\t\t\t\t\t\" `\" +\n\t\t\t\t\t\t\tthisName +\n\t\t\t\t\t\t\t\"`\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$.error(message);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/** Activate node with a given key and fire focus and activate events.\n\t\t *\n\t\t * A previously activated node will be deactivated.\n\t\t * If activeVisible option is set, all parents will be expanded as necessary.\n\t\t * Pass key = false, to deactivate the current node only.\n\t\t * @param {string} key\n\t\t * @param {object} [opts] additional options. Defaults to {noEvents: false, noFocus: false}\n\t\t * @returns {FancytreeNode} activated node (null, if not found)\n\t\t */\n\t\tactivateKey: function (key, opts) {\n\t\t\tvar node = this.getNodeByKey(key);\n\t\t\tif (node) {\n\t\t\t\tnode.setActive(true, opts);\n\t\t\t} else if (this.activeNode) {\n\t\t\t\tthis.activeNode.setActive(false, opts);\n\t\t\t}\n\t\t\treturn node;\n\t\t},\n\t\t/** (experimental) Add child status nodes that indicate 'More...', ....\n\t\t * @param {boolean|object} node optional node definition. Pass `false` to remove all paging nodes.\n\t\t * @param {string} [mode='append'] 'child'|firstChild'\n\t\t * @since 2.15\n\t\t */\n\t\taddPagingNode: function (node, mode) {\n\t\t\treturn this.rootNode.addPagingNode(node, mode);\n\t\t},\n\t\t/**\n\t\t * (experimental) Apply a modification (or navigation) operation.\n\t\t *\n\t\t * Valid commands:\n\t\t *   - 'moveUp', 'moveDown'\n\t\t *   - 'indent', 'outdent'\n\t\t *   - 'remove'\n\t\t *   - 'edit', 'addChild', 'addSibling': (reqires ext-edit extension)\n\t\t *   - 'cut', 'copy', 'paste': (use an internal singleton 'clipboard')\n\t\t *   - 'down', 'first', 'last', 'left', 'parent', 'right', 'up': navigate\n\t\t *\n\t\t * @param {string} cmd\n\t\t * @param {FancytreeNode} [node=active_node]\n\t\t * @param {object} [opts] Currently unused\n\t\t *\n\t\t * @since 2.32\n\t\t */\n\t\tapplyCommand: function (cmd, node, opts_) {\n\t\t\tvar // clipboard,\n\t\t\t\trefNode;\n\t\t\t// opts = $.extend(\n\t\t\t// \t{ setActive: true, clipboard: CLIPBOARD },\n\t\t\t// \topts_\n\t\t\t// );\n\n\t\t\tnode = node || this.getActiveNode();\n\t\t\t// clipboard = opts.clipboard;\n\n\t\t\tswitch (cmd) {\n\t\t\t\t// Sorting and indentation:\n\t\t\t\tcase \"moveUp\":\n\t\t\t\t\trefNode = node.getPrevSibling();\n\t\t\t\t\tif (refNode) {\n\t\t\t\t\t\tnode.moveTo(refNode, \"before\");\n\t\t\t\t\t\tnode.setActive();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"moveDown\":\n\t\t\t\t\trefNode = node.getNextSibling();\n\t\t\t\t\tif (refNode) {\n\t\t\t\t\t\tnode.moveTo(refNode, \"after\");\n\t\t\t\t\t\tnode.setActive();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"indent\":\n\t\t\t\t\trefNode = node.getPrevSibling();\n\t\t\t\t\tif (refNode) {\n\t\t\t\t\t\tnode.moveTo(refNode, \"child\");\n\t\t\t\t\t\trefNode.setExpanded();\n\t\t\t\t\t\tnode.setActive();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"outdent\":\n\t\t\t\t\tif (!node.isTopLevel()) {\n\t\t\t\t\t\tnode.moveTo(node.getParent(), \"after\");\n\t\t\t\t\t\tnode.setActive();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t// Remove:\n\t\t\t\tcase \"remove\":\n\t\t\t\t\trefNode = node.getPrevSibling() || node.getParent();\n\t\t\t\t\tnode.remove();\n\t\t\t\t\tif (refNode) {\n\t\t\t\t\t\trefNode.setActive();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t// Add, edit (requires ext-edit):\n\t\t\t\tcase \"addChild\":\n\t\t\t\t\tnode.editCreateNode(\"child\", \"\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"addSibling\":\n\t\t\t\t\tnode.editCreateNode(\"after\", \"\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"rename\":\n\t\t\t\t\tnode.editStart();\n\t\t\t\t\tbreak;\n\t\t\t\t// Simple clipboard simulation:\n\t\t\t\t// case \"cut\":\n\t\t\t\t// \tclipboard = { mode: cmd, data: node };\n\t\t\t\t// \tbreak;\n\t\t\t\t// case \"copy\":\n\t\t\t\t// \tclipboard = {\n\t\t\t\t// \t\tmode: cmd,\n\t\t\t\t// \t\tdata: node.toDict(function(d, n) {\n\t\t\t\t// \t\t\tdelete d.key;\n\t\t\t\t// \t\t}),\n\t\t\t\t// \t};\n\t\t\t\t// \tbreak;\n\t\t\t\t// case \"clear\":\n\t\t\t\t// \tclipboard = null;\n\t\t\t\t// \tbreak;\n\t\t\t\t// case \"paste\":\n\t\t\t\t// \tif (clipboard.mode === \"cut\") {\n\t\t\t\t// \t\t// refNode = node.getPrevSibling();\n\t\t\t\t// \t\tclipboard.data.moveTo(node, \"child\");\n\t\t\t\t// \t\tclipboard.data.setActive();\n\t\t\t\t// \t} else if (clipboard.mode === \"copy\") {\n\t\t\t\t// \t\tnode.addChildren(clipboard.data).setActive();\n\t\t\t\t// \t}\n\t\t\t\t// \tbreak;\n\t\t\t\t// Navigation commands:\n\t\t\t\tcase \"down\":\n\t\t\t\tcase \"first\":\n\t\t\t\tcase \"last\":\n\t\t\t\tcase \"left\":\n\t\t\t\tcase \"parent\":\n\t\t\t\tcase \"right\":\n\t\t\t\tcase \"up\":\n\t\t\t\t\treturn node.navigate(cmd);\n\t\t\t\tdefault:\n\t\t\t\t\t$.error(\"Unhandled command: '\" + cmd + \"'\");\n\t\t\t}\n\t\t},\n\t\t/** (experimental) Modify existing data model.\n\t\t *\n\t\t * @param {Array} patchList array of [key, NodePatch] arrays\n\t\t * @returns {$.Promise} resolved, when all patches have been applied\n\t\t * @see TreePatch\n\t\t */\n\t\tapplyPatch: function (patchList) {\n\t\t\tvar dfd,\n\t\t\t\ti,\n\t\t\t\tp2,\n\t\t\t\tkey,\n\t\t\t\tpatch,\n\t\t\t\tnode,\n\t\t\t\tpatchCount = patchList.length,\n\t\t\t\tdeferredList = [];\n\n\t\t\tfor (i = 0; i < patchCount; i++) {\n\t\t\t\tp2 = patchList[i];\n\t\t\t\t_assert(\n\t\t\t\t\tp2.length === 2,\n\t\t\t\t\t\"patchList must be an array of length-2-arrays\"\n\t\t\t\t);\n\t\t\t\tkey = p2[0];\n\t\t\t\tpatch = p2[1];\n\t\t\t\tnode = key === null ? this.rootNode : this.getNodeByKey(key);\n\t\t\t\tif (node) {\n\t\t\t\t\tdfd = new $.Deferred();\n\t\t\t\t\tdeferredList.push(dfd);\n\t\t\t\t\tnode.applyPatch(patch).always(_makeResolveFunc(dfd, node));\n\t\t\t\t} else {\n\t\t\t\t\tthis.warn(\"could not find node with key '\" + key + \"'\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Return a promise that is resolved, when ALL patches were applied\n\t\t\treturn $.when.apply($, deferredList).promise();\n\t\t},\n\t\t/* TODO: implement in dnd extension\n\t\tcancelDrag: function() {\n\t\t\t\tvar dd = $.ui.ddmanager.current;\n\t\t\t\tif(dd){\n\t\t\t\t\tdd.cancel();\n\t\t\t\t}\n\t\t\t},\n\t\t*/\n\t\t/** Remove all nodes.\n\t\t * @since 2.14\n\t\t */\n\t\tclear: function (source) {\n\t\t\tthis._callHook(\"treeClear\", this);\n\t\t},\n\t\t/** Return the number of nodes.\n\t\t * @returns {integer}\n\t\t */\n\t\tcount: function () {\n\t\t\treturn this.rootNode.countChildren();\n\t\t},\n\t\t/** Write to browser console if debugLevel >= 4 (prepending tree name)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\tdebug: function (msg) {\n\t\t\tif (this.options.debugLevel >= 4) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"log\", arguments);\n\t\t\t}\n\t\t},\n\t\t/** Destroy this widget, restore previous markup and cleanup resources.\n\t\t *\n\t\t * @since 2.34\n\t\t */\n\t\tdestroy: function () {\n\t\t\tthis.widget.destroy();\n\t\t},\n\t\t/** Enable (or disable) the tree control.\n\t\t *\n\t\t * @param {boolean} [flag=true] pass false to disable\n\t\t * @since 2.30\n\t\t */\n\t\tenable: function (flag) {\n\t\t\tif (flag === false) {\n\t\t\t\tthis.widget.disable();\n\t\t\t} else {\n\t\t\t\tthis.widget.enable();\n\t\t\t}\n\t\t},\n\t\t/** Temporarily suppress rendering to improve performance on bulk-updates.\n\t\t *\n\t\t * @param {boolean} flag\n\t\t * @returns {boolean} previous status\n\t\t * @since 2.19\n\t\t */\n\t\tenableUpdate: function (flag) {\n\t\t\tflag = flag !== false;\n\t\t\tif (!!this._enableUpdate === !!flag) {\n\t\t\t\treturn flag;\n\t\t\t}\n\t\t\tthis._enableUpdate = flag;\n\t\t\tif (flag) {\n\t\t\t\tthis.debug(\"enableUpdate(true): redraw \"); //, this._dirtyRoots);\n\t\t\t\tthis._callHook(\"treeStructureChanged\", this, \"enableUpdate\");\n\t\t\t\tthis.render();\n\t\t\t} else {\n\t\t\t\t// \tthis._dirtyRoots = null;\n\t\t\t\tthis.debug(\"enableUpdate(false)...\");\n\t\t\t}\n\t\t\treturn !flag; // return previous value\n\t\t},\n\t\t/** Write error to browser console if debugLevel >= 1 (prepending tree info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\terror: function (msg) {\n\t\t\tif (this.options.debugLevel >= 1) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"error\", arguments);\n\t\t\t}\n\t\t},\n\t\t/** Expand (or collapse) all parent nodes.\n\t\t *\n\t\t * This convenience method uses `tree.visit()` and `tree.setExpanded()`\n\t\t * internally.\n\t\t *\n\t\t * @param {boolean} [flag=true] pass false to collapse\n\t\t * @param {object} [opts] passed to setExpanded()\n\t\t * @since 2.30\n\t\t */\n\t\texpandAll: function (flag, opts) {\n\t\t\tvar prev = this.enableUpdate(false);\n\n\t\t\tflag = flag !== false;\n\t\t\tthis.visit(function (node) {\n\t\t\t\tif (\n\t\t\t\t\tnode.hasChildren() !== false &&\n\t\t\t\t\tnode.isExpanded() !== flag\n\t\t\t\t) {\n\t\t\t\t\tnode.setExpanded(flag, opts);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.enableUpdate(prev);\n\t\t},\n\t\t/**Find all nodes that matches condition.\n\t\t *\n\t\t * @param {string | function(node)} match title string to search for, or a\n\t\t *     callback function that returns `true` if a node is matched.\n\t\t * @returns {FancytreeNode[]} array of nodes (may be empty)\n\t\t * @see FancytreeNode#findAll\n\t\t * @since 2.12\n\t\t */\n\t\tfindAll: function (match) {\n\t\t\treturn this.rootNode.findAll(match);\n\t\t},\n\t\t/**Find first node that matches condition.\n\t\t *\n\t\t * @param {string | function(node)} match title string to search for, or a\n\t\t *     callback function that returns `true` if a node is matched.\n\t\t * @returns {FancytreeNode} matching node or null\n\t\t * @see FancytreeNode#findFirst\n\t\t * @since 2.12\n\t\t */\n\t\tfindFirst: function (match) {\n\t\t\treturn this.rootNode.findFirst(match);\n\t\t},\n\t\t/** Find the next visible node that starts with `match`, starting at `startNode`\n\t\t * and wrap-around at the end.\n\t\t *\n\t\t * @param {string|function} match\n\t\t * @param {FancytreeNode} [startNode] defaults to first node\n\t\t * @returns {FancytreeNode} matching node or null\n\t\t */\n\t\tfindNextNode: function (match, startNode) {\n\t\t\t//, visibleOnly) {\n\t\t\tvar res = null,\n\t\t\t\tfirstNode = this.getFirstChild();\n\n\t\t\tmatch =\n\t\t\t\ttypeof match === \"string\"\n\t\t\t\t\t? _makeNodeTitleStartMatcher(match)\n\t\t\t\t\t: match;\n\t\t\tstartNode = startNode || firstNode;\n\n\t\t\tfunction _checkNode(n) {\n\t\t\t\t// console.log(\"_check \" + n)\n\t\t\t\tif (match(n)) {\n\t\t\t\t\tres = n;\n\t\t\t\t}\n\t\t\t\tif (res || n === startNode) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.visitRows(_checkNode, {\n\t\t\t\tstart: startNode,\n\t\t\t\tincludeSelf: false,\n\t\t\t});\n\t\t\t// Wrap around search\n\t\t\tif (!res && startNode !== firstNode) {\n\t\t\t\tthis.visitRows(_checkNode, {\n\t\t\t\t\tstart: firstNode,\n\t\t\t\t\tincludeSelf: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t/** Find a node relative to another node.\n\t\t *\n\t\t * @param {FancytreeNode} node\n\t\t * @param {string|number} where 'down', 'first', 'last', 'left', 'parent', 'right', or 'up'.\n\t\t *   (Alternatively the keyCode that would normally trigger this move,\n\t\t *   e.g. `$.ui.keyCode.LEFT` = 'left'.\n\t\t * @param {boolean} [includeHidden=false] Not yet implemented\n\t\t * @returns {FancytreeNode|null}\n\t\t * @since v2.31\n\t\t */\n\t\tfindRelatedNode: function (node, where, includeHidden) {\n\t\t\tvar res = null,\n\t\t\t\tKC = $.ui.keyCode;\n\n\t\t\tswitch (where) {\n\t\t\t\tcase \"parent\":\n\t\t\t\tcase KC.BACKSPACE:\n\t\t\t\t\tif (node.parent && node.parent.parent) {\n\t\t\t\t\t\tres = node.parent;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"first\":\n\t\t\t\tcase KC.HOME:\n\t\t\t\t\t// First visible node\n\t\t\t\t\tthis.visit(function (n) {\n\t\t\t\t\t\tif (n.isVisible()) {\n\t\t\t\t\t\t\tres = n;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\tcase KC.END:\n\t\t\t\t\tthis.visit(function (n) {\n\t\t\t\t\t\t// last visible node\n\t\t\t\t\t\tif (n.isVisible()) {\n\t\t\t\t\t\t\tres = n;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"left\":\n\t\t\t\tcase KC.LEFT:\n\t\t\t\t\tif (node.expanded) {\n\t\t\t\t\t\tnode.setExpanded(false);\n\t\t\t\t\t} else if (node.parent && node.parent.parent) {\n\t\t\t\t\t\tres = node.parent;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\tcase KC.RIGHT:\n\t\t\t\t\tif (!node.expanded && (node.children || node.lazy)) {\n\t\t\t\t\t\tnode.setExpanded();\n\t\t\t\t\t\tres = node;\n\t\t\t\t\t} else if (node.children && node.children.length) {\n\t\t\t\t\t\tres = node.children[0];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\tcase KC.UP:\n\t\t\t\t\tthis.visitRows(\n\t\t\t\t\t\tfunction (n) {\n\t\t\t\t\t\t\tres = n;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ start: node, reverse: true, includeSelf: false }\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\tcase KC.DOWN:\n\t\t\t\t\tthis.visitRows(\n\t\t\t\t\t\tfunction (n) {\n\t\t\t\t\t\t\tres = n;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ start: node, includeSelf: false }\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.tree.warn(\"Unknown relation '\" + where + \"'.\");\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t// TODO: fromDict\n\t\t/**\n\t\t * Generate INPUT elements that can be submitted with html forms.\n\t\t *\n\t\t * In selectMode 3 only the topmost selected nodes are considered, unless\n\t\t * `opts.stopOnParents: false` is passed.\n\t\t *\n\t\t * @example\n\t\t * // Generate input elements for active and selected nodes\n\t\t * tree.generateFormElements();\n\t\t * // Generate input elements selected nodes, using a custom `name` attribute\n\t\t * tree.generateFormElements(\"cust_sel\", false);\n\t\t * // Generate input elements using a custom filter\n\t\t * tree.generateFormElements(true, true, { filter: function(node) {\n\t\t *     return node.isSelected() && node.data.yes;\n\t\t * }});\n\t\t *\n\t\t * @param {boolean | string} [selected=true] Pass false to disable, pass a string to override the field name (default: 'ft_ID[]')\n\t\t * @param {boolean | string} [active=true] Pass false to disable, pass a string to override the field name (default: 'ft_ID_active')\n\t\t * @param {object} [opts] default { filter: null, stopOnParents: true }\n\t\t */\n\t\tgenerateFormElements: function (selected, active, opts) {\n\t\t\topts = opts || {};\n\n\t\t\tvar nodeList,\n\t\t\t\tselectedName =\n\t\t\t\t\ttypeof selected === \"string\"\n\t\t\t\t\t\t? selected\n\t\t\t\t\t\t: \"ft_\" + this._id + \"[]\",\n\t\t\t\tactiveName =\n\t\t\t\t\ttypeof active === \"string\"\n\t\t\t\t\t\t? active\n\t\t\t\t\t\t: \"ft_\" + this._id + \"_active\",\n\t\t\t\tid = \"fancytree_result_\" + this._id,\n\t\t\t\t$result = $(\"#\" + id),\n\t\t\t\tstopOnParents =\n\t\t\t\t\tthis.options.selectMode === 3 &&\n\t\t\t\t\topts.stopOnParents !== false;\n\n\t\t\tif ($result.length) {\n\t\t\t\t$result.empty();\n\t\t\t} else {\n\t\t\t\t$result = $(\"<div>\", {\n\t\t\t\t\tid: id,\n\t\t\t\t})\n\t\t\t\t\t.hide()\n\t\t\t\t\t.insertAfter(this.$container);\n\t\t\t}\n\t\t\tif (active !== false && this.activeNode) {\n\t\t\t\t$result.append(\n\t\t\t\t\t$(\"<input>\", {\n\t\t\t\t\t\ttype: \"radio\",\n\t\t\t\t\t\tname: activeName,\n\t\t\t\t\t\tvalue: this.activeNode.key,\n\t\t\t\t\t\tchecked: true,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t\tfunction _appender(node) {\n\t\t\t\t$result.append(\n\t\t\t\t\t$(\"<input>\", {\n\t\t\t\t\t\ttype: \"checkbox\",\n\t\t\t\t\t\tname: selectedName,\n\t\t\t\t\t\tvalue: node.key,\n\t\t\t\t\t\tchecked: true,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (opts.filter) {\n\t\t\t\tthis.visit(function (node) {\n\t\t\t\t\tvar res = opts.filter(node);\n\t\t\t\t\tif (res === \"skip\") {\n\t\t\t\t\t\treturn res;\n\t\t\t\t\t}\n\t\t\t\t\tif (res !== false) {\n\t\t\t\t\t\t_appender(node);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (selected !== false) {\n\t\t\t\tnodeList = this.getSelectedNodes(stopOnParents);\n\t\t\t\t$.each(nodeList, function (idx, node) {\n\t\t\t\t\t_appender(node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Return the currently active node or null.\n\t\t * @returns {FancytreeNode}\n\t\t */\n\t\tgetActiveNode: function () {\n\t\t\treturn this.activeNode;\n\t\t},\n\t\t/** Return the first top level node if any (not the invisible root node).\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetFirstChild: function () {\n\t\t\treturn this.rootNode.getFirstChild();\n\t\t},\n\t\t/**\n\t\t * Return node that has keyboard focus or null.\n\t\t * @returns {FancytreeNode}\n\t\t */\n\t\tgetFocusNode: function () {\n\t\t\treturn this.focusNode;\n\t\t},\n\t\t/**\n\t\t * Return current option value.\n\t\t * (Note: this is the preferred variant of `$().fancytree(\"option\", \"KEY\")`)\n\t\t *\n\t\t * @param {string} name option name (may contain '.')\n\t\t * @returns {any}\n\t\t */\n\t\tgetOption: function (optionName) {\n\t\t\treturn this.widget.option(optionName);\n\t\t},\n\t\t/**\n\t\t * Return node with a given key or null if not found.\n\t\t *\n\t\t * @param {string} key\n\t\t * @param {FancytreeNode} [searchRoot] only search below this node\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetNodeByKey: function (key, searchRoot) {\n\t\t\t// Search the DOM by element ID (assuming this is faster than traversing all nodes).\n\t\t\tvar el, match;\n\t\t\t// TODO: use tree.keyMap if available\n\t\t\t// TODO: check opts.generateIds === true\n\t\t\tif (!searchRoot) {\n\t\t\t\tel = document.getElementById(this.options.idPrefix + key);\n\t\t\t\tif (el) {\n\t\t\t\t\treturn el.ftnode ? el.ftnode : null;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Not found in the DOM, but still may be in an unrendered part of tree\n\t\t\tsearchRoot = searchRoot || this.rootNode;\n\t\t\tmatch = null;\n\t\t\tkey = \"\" + key; // Convert to string (#1005)\n\t\t\tsearchRoot.visit(function (node) {\n\t\t\t\tif (node.key === key) {\n\t\t\t\t\tmatch = node;\n\t\t\t\t\treturn false; // Stop iteration\n\t\t\t\t}\n\t\t\t}, true);\n\t\t\treturn match;\n\t\t},\n\t\t/** Return the invisible system root node.\n\t\t * @returns {FancytreeNode}\n\t\t */\n\t\tgetRootNode: function () {\n\t\t\treturn this.rootNode;\n\t\t},\n\t\t/**\n\t\t * Return an array of selected nodes.\n\t\t *\n\t\t * Note: you cannot send this result via Ajax directly. Instead the\n\t\t * node object need to be converted to plain objects, for example\n\t\t * by using `$.map()` and `node.toDict()`.\n\t\t * @param {boolean} [stopOnParents=false] only return the topmost selected\n\t\t *     node (useful with selectMode 3)\n\t\t * @returns {FancytreeNode[]}\n\t\t */\n\t\tgetSelectedNodes: function (stopOnParents) {\n\t\t\treturn this.rootNode.getSelectedNodes(stopOnParents);\n\t\t},\n\t\t/** Return true if the tree control has keyboard focus\n\t\t * @returns {boolean}\n\t\t */\n\t\thasFocus: function () {\n\t\t\t// var ae = document.activeElement,\n\t\t\t// \thasFocus = !!(\n\t\t\t// \t\tae && $(ae).closest(\".fancytree-container\").length\n\t\t\t// \t);\n\n\t\t\t// if (hasFocus !== !!this._hasFocus) {\n\t\t\t// \tthis.warn(\n\t\t\t// \t\t\"hasFocus(): fix inconsistent container state, now: \" +\n\t\t\t// \t\t\thasFocus\n\t\t\t// \t);\n\t\t\t// \tthis._hasFocus = hasFocus;\n\t\t\t// \tthis.$container.toggleClass(\"fancytree-treefocus\", hasFocus);\n\t\t\t// }\n\t\t\t// return hasFocus;\n\t\t\treturn !!this._hasFocus;\n\t\t},\n\t\t/** Write to browser console if debugLevel >= 3 (prepending tree name)\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\tinfo: function (msg) {\n\t\t\tif (this.options.debugLevel >= 3) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"info\", arguments);\n\t\t\t}\n\t\t},\n\t\t/** Return true if any node is currently beeing loaded, i.e. a Ajax request is pending.\n\t\t * @returns {boolean}\n\t\t * @since 2.32\n\t\t */\n\t\tisLoading: function () {\n\t\t\tvar res = false;\n\n\t\t\tthis.rootNode.visit(function (n) {\n\t\t\t\t// also visit rootNode\n\t\t\t\tif (n._isLoading || n._requestId) {\n\t\t\t\t\tres = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t\treturn res;\n\t\t},\n\t\t/*\n\t\tTODO: isInitializing: function() {\n\t\t\treturn ( this.phase==\"init\" || this.phase==\"postInit\" );\n\t\t},\n\t\tTODO: isReloading: function() {\n\t\t\treturn ( this.phase==\"init\" || this.phase==\"postInit\" ) && this.options.persist && this.persistence.cookiesFound;\n\t\t},\n\t\tTODO: isUserEvent: function() {\n\t\t\treturn ( this.phase==\"userEvent\" );\n\t\t},\n\t\t*/\n\n\t\t/**\n\t\t * Make sure that a node with a given ID is loaded, by traversing - and\n\t\t * loading - its parents. This method is meant for lazy hierarchies.\n\t\t * A callback is executed for every node as we go.\n\t\t * @example\n\t\t * // Resolve using node.key:\n\t\t * tree.loadKeyPath(\"/_3/_23/_26/_27\", function(node, status){\n\t\t *   if(status === \"loaded\") {\n\t\t *     console.log(\"loaded intermediate node \" + node);\n\t\t *   }else if(status === \"ok\") {\n\t\t *     node.activate();\n\t\t *   }\n\t\t * });\n\t\t * // Use deferred promise:\n\t\t * tree.loadKeyPath(\"/_3/_23/_26/_27\").progress(function(data){\n\t\t *   if(data.status === \"loaded\") {\n\t\t *     console.log(\"loaded intermediate node \" + data.node);\n\t\t *   }else if(data.status === \"ok\") {\n\t\t *     node.activate();\n\t\t *   }\n\t\t * }).done(function(){\n\t\t *    ...\n\t\t * });\n\t\t * // Custom path segment resolver:\n\t\t * tree.loadKeyPath(\"/321/431/21/2\", {\n\t\t *   matchKey: function(node, key){\n\t\t *     return node.data.refKey === key;\n\t\t *   },\n\t\t *   callback: function(node, status){\n\t\t *     if(status === \"loaded\") {\n\t\t *       console.log(\"loaded intermediate node \" + node);\n\t\t *     }else if(status === \"ok\") {\n\t\t *       node.activate();\n\t\t *     }\n\t\t *   }\n\t\t * });\n\t\t * @param {string | string[]} keyPathList one or more key paths (e.g. '/3/2_1/7')\n\t\t * @param {function | object} optsOrCallback callback(node, status) is called for every visited node ('loading', 'loaded', 'ok', 'error').\n\t\t *     Pass an object to define custom key matchers for the path segments: {callback: function, matchKey: function}.\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tloadKeyPath: function (keyPathList, optsOrCallback) {\n\t\t\tvar callback,\n\t\t\t\ti,\n\t\t\t\tpath,\n\t\t\t\tself = this,\n\t\t\t\tdfd = new $.Deferred(),\n\t\t\t\tparent = this.getRootNode(),\n\t\t\t\tsep = this.options.keyPathSeparator,\n\t\t\t\tpathSegList = [],\n\t\t\t\topts = $.extend({}, optsOrCallback);\n\n\t\t\t// Prepare options\n\t\t\tif (typeof optsOrCallback === \"function\") {\n\t\t\t\tcallback = optsOrCallback;\n\t\t\t} else if (optsOrCallback && optsOrCallback.callback) {\n\t\t\t\tcallback = optsOrCallback.callback;\n\t\t\t}\n\t\t\topts.callback = function (ctx, node, status) {\n\t\t\t\tif (callback) {\n\t\t\t\t\tcallback.call(ctx, node, status);\n\t\t\t\t}\n\t\t\t\tdfd.notifyWith(ctx, [{ node: node, status: status }]);\n\t\t\t};\n\t\t\tif (opts.matchKey == null) {\n\t\t\t\topts.matchKey = function (node, key) {\n\t\t\t\t\treturn node.key === key;\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Convert array of path strings to array of segment arrays\n\t\t\tif (!_isArray(keyPathList)) {\n\t\t\t\tkeyPathList = [keyPathList];\n\t\t\t}\n\t\t\tfor (i = 0; i < keyPathList.length; i++) {\n\t\t\t\tpath = keyPathList[i];\n\t\t\t\t// strip leading slash\n\t\t\t\tif (path.charAt(0) === sep) {\n\t\t\t\t\tpath = path.substr(1);\n\t\t\t\t}\n\t\t\t\t// segListMap[path] = { parent: parent, segList: path.split(sep) };\n\t\t\t\tpathSegList.push(path.split(sep));\n\t\t\t\t// targetList.push({ parent: parent, segList: path.split(sep)/* , path: path*/});\n\t\t\t}\n\t\t\t// The timeout forces async behavior always (even if nodes are all loaded)\n\t\t\t// This way a potential progress() event will fire.\n\t\t\tsetTimeout(function () {\n\t\t\t\tself._loadKeyPathImpl(dfd, opts, parent, pathSegList).done(\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tdfd.resolve();\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}, 0);\n\t\t\treturn dfd.promise();\n\t\t},\n\t\t/*\n\t\t * Resolve a list of paths, relative to one parent node.\n\t\t */\n\t\t_loadKeyPathImpl: function (dfd, opts, parent, pathSegList) {\n\t\t\tvar deferredList,\n\t\t\t\ti,\n\t\t\t\tkey,\n\t\t\t\tnode,\n\t\t\t\tnodeKey,\n\t\t\t\tremain,\n\t\t\t\tremainMap,\n\t\t\t\ttmpParent,\n\t\t\t\tsegList,\n\t\t\t\tsubDfd,\n\t\t\t\tself = this;\n\n\t\t\tfunction __findChild(parent, key) {\n\t\t\t\t// console.log(\"__findChild\", key, parent);\n\t\t\t\tvar i,\n\t\t\t\t\tl,\n\t\t\t\t\tcl = parent.children;\n\n\t\t\t\tif (cl) {\n\t\t\t\t\tfor (i = 0, l = cl.length; i < l; i++) {\n\t\t\t\t\t\tif (opts.matchKey(cl[i], key)) {\n\t\t\t\t\t\t\treturn cl[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// console.log(\"_loadKeyPathImpl, parent=\", parent, \", pathSegList=\", pathSegList);\n\n\t\t\t// Pass 1:\n\t\t\t// Handle all path segments for nodes that are already loaded.\n\t\t\t// Collect distinct top-most lazy nodes in a map.\n\t\t\t// Note that we can use node.key to de-dupe entries, even if a custom matcher would\n\t\t\t// look for other node attributes.\n\t\t\t// map[node.key] => {node: node, pathList: [list of remaining rest-paths]}\n\t\t\tremainMap = {};\n\n\t\t\tfor (i = 0; i < pathSegList.length; i++) {\n\t\t\t\tsegList = pathSegList[i];\n\t\t\t\t// target = targetList[i];\n\n\t\t\t\t// Traverse and pop path segments (i.e. keys), until we hit a lazy, unloaded node\n\t\t\t\ttmpParent = parent;\n\t\t\t\twhile (segList.length) {\n\t\t\t\t\tkey = segList.shift();\n\t\t\t\t\tnode = __findChild(tmpParent, key);\n\t\t\t\t\tif (!node) {\n\t\t\t\t\t\tthis.warn(\n\t\t\t\t\t\t\t\"loadKeyPath: key not found: \" +\n\t\t\t\t\t\t\t\tkey +\n\t\t\t\t\t\t\t\t\" (parent: \" +\n\t\t\t\t\t\t\t\ttmpParent +\n\t\t\t\t\t\t\t\t\")\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\topts.callback(this, key, \"error\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (segList.length === 0) {\n\t\t\t\t\t\topts.callback(this, node, \"ok\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (!node.lazy || node.hasChildren() !== undefined) {\n\t\t\t\t\t\topts.callback(this, node, \"loaded\");\n\t\t\t\t\t\ttmpParent = node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\topts.callback(this, node, \"loaded\");\n\t\t\t\t\t\tkey = node.key; //target.segList.join(sep);\n\t\t\t\t\t\tif (remainMap[key]) {\n\t\t\t\t\t\t\tremainMap[key].pathSegList.push(segList);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tremainMap[key] = {\n\t\t\t\t\t\t\t\tparent: node,\n\t\t\t\t\t\t\t\tpathSegList: [segList],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// console.log(\"_loadKeyPathImpl AFTER pass 1, remainMap=\", remainMap);\n\n\t\t\t// Now load all lazy nodes and continue iteration for remaining paths\n\t\t\tdeferredList = [];\n\n\t\t\t// Avoid jshint warning 'Don't make functions within a loop.':\n\t\t\tfunction __lazyload(dfd, parent, pathSegList) {\n\t\t\t\t// console.log(\"__lazyload\", parent, \"pathSegList=\", pathSegList);\n\t\t\t\topts.callback(self, parent, \"loading\");\n\t\t\t\tparent\n\t\t\t\t\t.load()\n\t\t\t\t\t.done(function () {\n\t\t\t\t\t\tself._loadKeyPathImpl\n\t\t\t\t\t\t\t.call(self, dfd, opts, parent, pathSegList)\n\t\t\t\t\t\t\t.always(_makeResolveFunc(dfd, self));\n\t\t\t\t\t})\n\t\t\t\t\t.fail(function (errMsg) {\n\t\t\t\t\t\tself.warn(\"loadKeyPath: error loading lazy \" + parent);\n\t\t\t\t\t\topts.callback(self, node, \"error\");\n\t\t\t\t\t\tdfd.rejectWith(self);\n\t\t\t\t\t});\n\t\t\t}\n\t\t\t// remainMap contains parent nodes, each with a list of relative sub-paths.\n\t\t\t// We start loading all of them now, and pass the the list to each loader.\n\t\t\tfor (nodeKey in remainMap) {\n\t\t\t\tif (_hasProp(remainMap, nodeKey)) {\n\t\t\t\t\tremain = remainMap[nodeKey];\n\t\t\t\t\t// console.log(\"for(): remain=\", remain, \"remainMap=\", remainMap);\n\t\t\t\t\t// key = remain.segList.shift();\n\t\t\t\t\t// node = __findChild(remain.parent, key);\n\t\t\t\t\t// if (node == null) {  // #576\n\t\t\t\t\t// \t// Issue #576, refactored for v2.27:\n\t\t\t\t\t// \t// The root cause was, that sometimes the wrong parent was used here\n\t\t\t\t\t// \t// to find the next segment.\n\t\t\t\t\t// \t// Falling back to getNodeByKey() was a hack that no longer works if a custom\n\t\t\t\t\t// \t// matcher is used, because we cannot assume that a single segment-key is unique\n\t\t\t\t\t// \t// throughout the tree.\n\t\t\t\t\t// \tself.error(\"loadKeyPath: error loading child by key '\" + key + \"' (parent: \" + target.parent + \")\", target);\n\t\t\t\t\t// \t// \tnode = self.getNodeByKey(key);\n\t\t\t\t\t// \tcontinue;\n\t\t\t\t\t// }\n\t\t\t\t\tsubDfd = new $.Deferred();\n\t\t\t\t\tdeferredList.push(subDfd);\n\t\t\t\t\t__lazyload(subDfd, remain.parent, remain.pathSegList);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Return a promise that is resolved, when ALL paths were loaded\n\t\t\treturn $.when.apply($, deferredList).promise();\n\t\t},\n\t\t/** Re-fire beforeActivate, activate, and (optional) focus events.\n\t\t * Calling this method in the `init` event, will activate the node that\n\t\t * was marked 'active' in the source data, and optionally set the keyboard\n\t\t * focus.\n\t\t * @param [setFocus=false]\n\t\t */\n\t\treactivate: function (setFocus) {\n\t\t\tvar res,\n\t\t\t\tnode = this.activeNode;\n\n\t\t\tif (!node) {\n\t\t\t\treturn _getResolvedPromise();\n\t\t\t}\n\t\t\tthis.activeNode = null; // Force re-activating\n\t\t\tres = node.setActive(true, { noFocus: true });\n\t\t\tif (setFocus) {\n\t\t\t\tnode.setFocus();\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t/** Reload tree from source and return a promise.\n\t\t * @param [source] optional new source (defaults to initial source data)\n\t\t * @returns {$.Promise}\n\t\t */\n\t\treload: function (source) {\n\t\t\tthis._callHook(\"treeClear\", this);\n\t\t\treturn this._callHook(\"treeLoad\", this, source);\n\t\t},\n\t\t/**Render tree (i.e. create DOM elements for all top-level nodes).\n\t\t * @param {boolean} [force=false] create DOM elemnts, even if parent is collapsed\n\t\t * @param {boolean} [deep=false]\n\t\t */\n\t\trender: function (force, deep) {\n\t\t\treturn this.rootNode.render(force, deep);\n\t\t},\n\t\t/**(De)select all nodes.\n\t\t * @param {boolean} [flag=true]\n\t\t * @since 2.28\n\t\t */\n\t\tselectAll: function (flag) {\n\t\t\tthis.visit(function (node) {\n\t\t\t\tnode.setSelected(flag);\n\t\t\t});\n\t\t},\n\t\t// TODO: selectKey: function(key, select)\n\t\t// TODO: serializeArray: function(stopOnParents)\n\t\t/**\n\t\t * @param {boolean} [flag=true]\n\t\t */\n\t\tsetFocus: function (flag) {\n\t\t\treturn this._callHook(\"treeSetFocus\", this, flag);\n\t\t},\n\t\t/**\n\t\t * Set current option value.\n\t\t * (Note: this is the preferred variant of `$().fancytree(\"option\", \"KEY\", VALUE)`)\n\t\t * @param {string} name option name (may contain '.')\n\t\t * @param {any} new value\n\t\t */\n\t\tsetOption: function (optionName, value) {\n\t\t\treturn this.widget.option(optionName, value);\n\t\t},\n\t\t/**\n\t\t * Call console.time() when in debug mode (verbose >= 4).\n\t\t *\n\t\t * @param {string} label\n\t\t */\n\t\tdebugTime: function (label) {\n\t\t\tif (this.options.debugLevel >= 4) {\n\t\t\t\twindow.console.time(this + \" - \" + label);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Call console.timeEnd() when in debug mode (verbose >= 4).\n\t\t *\n\t\t * @param {string} label\n\t\t */\n\t\tdebugTimeEnd: function (label) {\n\t\t\tif (this.options.debugLevel >= 4) {\n\t\t\t\twindow.console.timeEnd(this + \" - \" + label);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Return all nodes as nested list of {@link NodeData}.\n\t\t *\n\t\t * @param {boolean} [includeRoot=false] Returns the hidden system root node (and its children)\n\t\t * @param {function} [callback] callback(dict, node) is called for every node, in order to allow modifications.\n\t\t *     Return `false` to ignore this node or \"skip\" to include this node without its children.\n\t\t * @returns {Array | object}\n\t\t * @see FancytreeNode#toDict\n\t\t */\n\t\ttoDict: function (includeRoot, callback) {\n\t\t\tvar res = this.rootNode.toDict(true, callback);\n\t\t\treturn includeRoot ? res : res.children;\n\t\t},\n\t\t/* Implicitly called for string conversions.\n\t\t * @returns {string}\n\t\t */\n\t\ttoString: function () {\n\t\t\treturn \"Fancytree@\" + this._id;\n\t\t\t// return \"<Fancytree(#\" + this._id + \")>\";\n\t\t},\n\t\t/* _trigger a widget event with additional node ctx.\n\t\t * @see EventData\n\t\t */\n\t\t_triggerNodeEvent: function (type, node, originalEvent, extra) {\n\t\t\t// this.debug(\"_trigger(\" + type + \"): '\" + ctx.node.title + \"'\", ctx);\n\t\t\tvar ctx = this._makeHookContext(node, originalEvent, extra),\n\t\t\t\tres = this.widget._trigger(type, originalEvent, ctx);\n\t\t\tif (res !== false && ctx.result !== undefined) {\n\t\t\t\treturn ctx.result;\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t/* _trigger a widget event with additional tree data. */\n\t\t_triggerTreeEvent: function (type, originalEvent, extra) {\n\t\t\t// this.debug(\"_trigger(\" + type + \")\", ctx);\n\t\t\tvar ctx = this._makeHookContext(this, originalEvent, extra),\n\t\t\t\tres = this.widget._trigger(type, originalEvent, ctx);\n\n\t\t\tif (res !== false && ctx.result !== undefined) {\n\t\t\t\treturn ctx.result;\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t/** Call fn(node) for all nodes in hierarchical order (depth-first).\n\t\t *\n\t\t * @param {function} fn the callback function.\n\t\t *     Return false to stop iteration, return \"skip\" to skip this node and children only.\n\t\t * @returns {boolean} false, if the iterator was stopped.\n\t\t */\n\t\tvisit: function (fn) {\n\t\t\treturn this.rootNode.visit(fn, false);\n\t\t},\n\t\t/** Call fn(node) for all nodes in vertical order, top down (or bottom up).<br>\n\t\t * Stop iteration, if fn() returns false.<br>\n\t\t * Return false if iteration was stopped.\n\t\t *\n\t\t * @param {function} fn the callback function.\n\t\t *     Return false to stop iteration, return \"skip\" to skip this node and children only.\n\t\t * @param {object} [options]\n\t\t *     Defaults:\n\t\t *     {start: First top node, reverse: false, includeSelf: true, includeHidden: false}\n\t\t * @returns {boolean} false if iteration was cancelled\n\t\t * @since 2.28\n\t\t */\n\t\tvisitRows: function (fn, opts) {\n\t\t\tif (!this.rootNode.hasChildren()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (opts && opts.reverse) {\n\t\t\t\tdelete opts.reverse;\n\t\t\t\treturn this._visitRowsUp(fn, opts);\n\t\t\t}\n\t\t\topts = opts || {};\n\n\t\t\tvar i,\n\t\t\t\tnextIdx,\n\t\t\t\tparent,\n\t\t\t\tres,\n\t\t\t\tsiblings,\n\t\t\t\tsiblingOfs = 0,\n\t\t\t\tskipFirstNode = opts.includeSelf === false,\n\t\t\t\tincludeHidden = !!opts.includeHidden,\n\t\t\t\tcheckFilter = !includeHidden && this.enableFilter,\n\t\t\t\tnode = opts.start || this.rootNode.children[0];\n\n\t\t\tparent = node.parent;\n\t\t\twhile (parent) {\n\t\t\t\t// visit siblings\n\t\t\t\tsiblings = parent.children;\n\t\t\t\tnextIdx = siblings.indexOf(node) + siblingOfs;\n\t\t\t\t_assert(\n\t\t\t\t\tnextIdx >= 0,\n\t\t\t\t\t\"Could not find \" +\n\t\t\t\t\t\tnode +\n\t\t\t\t\t\t\" in parent's children: \" +\n\t\t\t\t\t\tparent\n\t\t\t\t);\n\n\t\t\t\tfor (i = nextIdx; i < siblings.length; i++) {\n\t\t\t\t\tnode = siblings[i];\n\t\t\t\t\tif (checkFilter && !node.match && !node.subMatchCount) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!skipFirstNode && fn(node) === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tskipFirstNode = false;\n\t\t\t\t\t// Dive into node's child nodes\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.children &&\n\t\t\t\t\t\tnode.children.length &&\n\t\t\t\t\t\t(includeHidden || node.expanded)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Disable warning: Functions declared within loops referencing an outer\n\t\t\t\t\t\t// scoped variable may lead to confusing semantics:\n\t\t\t\t\t\t/*jshint -W083 */\n\t\t\t\t\t\tres = node.visit(function (n) {\n\t\t\t\t\t\t\tif (checkFilter && !n.match && !n.subMatchCount) {\n\t\t\t\t\t\t\t\treturn \"skip\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (fn(n) === false) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!includeHidden && n.children && !n.expanded) {\n\t\t\t\t\t\t\t\treturn \"skip\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, false);\n\t\t\t\t\t\t/*jshint +W083 */\n\t\t\t\t\t\tif (res === false) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Visit parent nodes (bottom up)\n\t\t\t\tnode = parent;\n\t\t\t\tparent = parent.parent;\n\t\t\t\tsiblingOfs = 1; //\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/* Call fn(node) for all nodes in vertical order, bottom up.\n\t\t */\n\t\t_visitRowsUp: function (fn, opts) {\n\t\t\tvar children,\n\t\t\t\tidx,\n\t\t\t\tparent,\n\t\t\t\tincludeHidden = !!opts.includeHidden,\n\t\t\t\tnode = opts.start || this.rootNode.children[0];\n\n\t\t\twhile (true) {\n\t\t\t\tparent = node.parent;\n\t\t\t\tchildren = parent.children;\n\n\t\t\t\tif (children[0] === node) {\n\t\t\t\t\t// If this is already the first sibling, goto parent\n\t\t\t\t\tnode = parent;\n\t\t\t\t\tif (!node.parent) {\n\t\t\t\t\t\tbreak; // first node of the tree\n\t\t\t\t\t}\n\t\t\t\t\tchildren = parent.children;\n\t\t\t\t} else {\n\t\t\t\t\t// Otherwise, goto prev. sibling\n\t\t\t\t\tidx = children.indexOf(node);\n\t\t\t\t\tnode = children[idx - 1];\n\t\t\t\t\t// If the prev. sibling has children, follow down to last descendant\n\t\t\t\t\twhile (\n\t\t\t\t\t\t// See: https://github.com/eslint/eslint/issues/11302\n\t\t\t\t\t\t// eslint-disable-next-line no-unmodified-loop-condition\n\t\t\t\t\t\t(includeHidden || node.expanded) &&\n\t\t\t\t\t\tnode.children &&\n\t\t\t\t\t\tnode.children.length\n\t\t\t\t\t) {\n\t\t\t\t\t\tchildren = node.children;\n\t\t\t\t\t\tparent = node;\n\t\t\t\t\t\tnode = children[children.length - 1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Skip invisible\n\t\t\t\tif (!includeHidden && !node.isVisible()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (fn(node) === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/** Write warning to browser console if debugLevel >= 2 (prepending tree info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\twarn: function (msg) {\n\t\t\tif (this.options.debugLevel >= 2) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"warn\", arguments);\n\t\t\t}\n\t\t},\n\t};\n\n\t/**\n\t * These additional methods of the {@link Fancytree} class are 'hook functions'\n\t * that can be used and overloaded by extensions.\n\t *\n\t * @see [writing extensions](https://github.com/mar10/fancytree/wiki/TutorialExtensions)\n\t * @mixin Fancytree_Hooks\n\t */\n\t$.extend(\n\t\tFancytree.prototype,\n\t\t/** @lends Fancytree_Hooks# */\n\t\t{\n\t\t\t/** Default handling for mouse click events.\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeClick: function (ctx) {\n\t\t\t\tvar activate,\n\t\t\t\t\texpand,\n\t\t\t\t\t// event = ctx.originalEvent,\n\t\t\t\t\ttargetType = ctx.targetType,\n\t\t\t\t\tnode = ctx.node;\n\n\t\t\t\t// this.debug(\"ftnode.onClick(\" + event.type + \"): ftnode:\" + this + \", button:\" + event.button + \", which: \" + event.which, ctx);\n\t\t\t\t// TODO: use switch\n\t\t\t\t// TODO: make sure clicks on embedded <input> doesn't steal focus (see table sample)\n\t\t\t\tif (targetType === \"expander\") {\n\t\t\t\t\tif (node.isLoading()) {\n\t\t\t\t\t\t// #495: we probably got a click event while a lazy load is pending.\n\t\t\t\t\t\t// The 'expanded' state is not yet set, so 'toggle' would expand\n\t\t\t\t\t\t// and trigger lazyLoad again.\n\t\t\t\t\t\t// It would be better to allow to collapse/expand the status node\n\t\t\t\t\t\t// while loading (instead of ignoring), but that would require some\n\t\t\t\t\t\t// more work.\n\t\t\t\t\t\tnode.debug(\"Got 2nd click while loading: ignored\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// Clicking the expander icon always expands/collapses\n\t\t\t\t\tthis._callHook(\"nodeToggleExpanded\", ctx);\n\t\t\t\t} else if (targetType === \"checkbox\") {\n\t\t\t\t\t// Clicking the checkbox always (de)selects\n\t\t\t\t\tthis._callHook(\"nodeToggleSelected\", ctx);\n\t\t\t\t\tif (ctx.options.focusOnSelect) {\n\t\t\t\t\t\t// #358\n\t\t\t\t\t\tthis._callHook(\"nodeSetFocus\", ctx, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Honor `clickFolderMode` for\n\t\t\t\t\texpand = false;\n\t\t\t\t\tactivate = true;\n\t\t\t\t\tif (node.folder) {\n\t\t\t\t\t\tswitch (ctx.options.clickFolderMode) {\n\t\t\t\t\t\t\tcase 2: // expand only\n\t\t\t\t\t\t\t\texpand = true;\n\t\t\t\t\t\t\t\tactivate = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 3: // expand and activate\n\t\t\t\t\t\t\t\tactivate = true;\n\t\t\t\t\t\t\t\texpand = true; //!node.isExpanded();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// else 1 or 4: just activate\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (activate) {\n\t\t\t\t\t\tthis.nodeSetFocus(ctx);\n\t\t\t\t\t\tthis._callHook(\"nodeSetActive\", ctx, true);\n\t\t\t\t\t}\n\t\t\t\t\tif (expand) {\n\t\t\t\t\t\tif (!activate) {\n\t\t\t\t\t\t\t// this._callHook(\"nodeSetFocus\", ctx);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// this._callHook(\"nodeSetExpanded\", ctx, true);\n\t\t\t\t\t\tthis._callHook(\"nodeToggleExpanded\", ctx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Make sure that clicks stop, otherwise <a href='#'> jumps to the top\n\t\t\t\t// if(event.target.localName === \"a\" && event.target.className === \"fancytree-title\"){\n\t\t\t\t// \tevent.preventDefault();\n\t\t\t\t// }\n\t\t\t\t// TODO: return promise?\n\t\t\t},\n\t\t\t/** Collapse all other  children of same parent.\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {object} callOpts\n\t\t\t */\n\t\t\tnodeCollapseSiblings: function (ctx, callOpts) {\n\t\t\t\t// TODO: return promise?\n\t\t\t\tvar ac,\n\t\t\t\t\ti,\n\t\t\t\t\tl,\n\t\t\t\t\tnode = ctx.node;\n\n\t\t\t\tif (node.parent) {\n\t\t\t\t\tac = node.parent.children;\n\t\t\t\t\tfor (i = 0, l = ac.length; i < l; i++) {\n\t\t\t\t\t\tif (ac[i] !== node && ac[i].expanded) {\n\t\t\t\t\t\t\tthis._callHook(\n\t\t\t\t\t\t\t\t\"nodeSetExpanded\",\n\t\t\t\t\t\t\t\tac[i],\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tcallOpts\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\t\t\t/** Default handling for mouse douleclick events.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeDblclick: function (ctx) {\n\t\t\t\t// TODO: return promise?\n\t\t\t\tif (\n\t\t\t\t\tctx.targetType === \"title\" &&\n\t\t\t\t\tctx.options.clickFolderMode === 4\n\t\t\t\t) {\n\t\t\t\t\t// this.nodeSetFocus(ctx);\n\t\t\t\t\t// this._callHook(\"nodeSetActive\", ctx, true);\n\t\t\t\t\tthis._callHook(\"nodeToggleExpanded\", ctx);\n\t\t\t\t}\n\t\t\t\t// TODO: prevent text selection on dblclicks\n\t\t\t\tif (ctx.targetType === \"title\") {\n\t\t\t\t\tctx.originalEvent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Default handling for mouse keydown events.\n\t\t\t *\n\t\t\t * NOTE: this may be called with node == null if tree (but no node) has focus.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeKeydown: function (ctx) {\n\t\t\t\t// TODO: return promise?\n\t\t\t\tvar matchNode,\n\t\t\t\t\tstamp,\n\t\t\t\t\t_res,\n\t\t\t\t\tfocusNode,\n\t\t\t\t\tevent = ctx.originalEvent,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\twhich = event.which,\n\t\t\t\t\t// #909: Use event.key, to get unicode characters.\n\t\t\t\t\t// We can't use `/\\w/.test(key)`, because that would\n\t\t\t\t\t// only detect plain ascii alpha-numerics. But we still need\n\t\t\t\t\t// to ignore modifier-only, whitespace, cursor-keys, etc.\n\t\t\t\t\tkey = event.key || String.fromCharCode(which),\n\t\t\t\t\tspecialModifiers = !!(\n\t\t\t\t\t\tevent.altKey ||\n\t\t\t\t\t\tevent.ctrlKey ||\n\t\t\t\t\t\tevent.metaKey\n\t\t\t\t\t),\n\t\t\t\t\tisAlnum =\n\t\t\t\t\t\t!MODIFIERS[which] &&\n\t\t\t\t\t\t!SPECIAL_KEYCODES[which] &&\n\t\t\t\t\t\t!specialModifiers,\n\t\t\t\t\t$target = $(event.target),\n\t\t\t\t\thandled = true,\n\t\t\t\t\tactivate = !(event.ctrlKey || !opts.autoActivate);\n\n\t\t\t\t// (node || FT).debug(\"ftnode.nodeKeydown(\" + event.type + \"): ftnode:\" + this + \", charCode:\" + event.charCode + \", keyCode: \" + event.keyCode + \", which: \" + event.which);\n\t\t\t\t// FT.debug( \"eventToString(): \" + FT.eventToString(event) + \", key='\" + key + \"', isAlnum: \" + isAlnum );\n\n\t\t\t\t// Set focus to active (or first node) if no other node has the focus yet\n\t\t\t\tif (!node) {\n\t\t\t\t\tfocusNode = this.getActiveNode() || this.getFirstChild();\n\t\t\t\t\tif (focusNode) {\n\t\t\t\t\t\tfocusNode.setFocus();\n\t\t\t\t\t\tnode = ctx.node = this.focusNode;\n\t\t\t\t\t\tnode.debug(\"Keydown force focus on active node\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\topts.quicksearch &&\n\t\t\t\t\tisAlnum &&\n\t\t\t\t\t!$target.is(\":input:enabled\")\n\t\t\t\t) {\n\t\t\t\t\t// Allow to search for longer streaks if typed in quickly\n\t\t\t\t\tstamp = Date.now();\n\t\t\t\t\tif (stamp - tree.lastQuicksearchTime > 500) {\n\t\t\t\t\t\ttree.lastQuicksearchTerm = \"\";\n\t\t\t\t\t}\n\t\t\t\t\ttree.lastQuicksearchTime = stamp;\n\t\t\t\t\ttree.lastQuicksearchTerm += key;\n\t\t\t\t\t// tree.debug(\"quicksearch find\", tree.lastQuicksearchTerm);\n\t\t\t\t\tmatchNode = tree.findNextNode(\n\t\t\t\t\t\ttree.lastQuicksearchTerm,\n\t\t\t\t\t\ttree.getActiveNode()\n\t\t\t\t\t);\n\t\t\t\t\tif (matchNode) {\n\t\t\t\t\t\tmatchNode.setActive();\n\t\t\t\t\t}\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tswitch (FT.eventToString(event)) {\n\t\t\t\t\tcase \"+\":\n\t\t\t\t\tcase \"=\": // 187: '+' @ Chrome, Safari\n\t\t\t\t\t\ttree.nodeSetExpanded(ctx, true);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"-\":\n\t\t\t\t\t\ttree.nodeSetExpanded(ctx, false);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"space\":\n\t\t\t\t\t\tif (node.isPagingNode()) {\n\t\t\t\t\t\t\ttree._triggerNodeEvent(\"clickPaging\", ctx, event);\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tFT.evalOption(\"checkbox\", node, node, opts, false)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// #768\n\t\t\t\t\t\t\ttree.nodeToggleSelected(ctx);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttree.nodeSetActive(ctx, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"return\":\n\t\t\t\t\t\ttree.nodeSetActive(ctx, true);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"home\":\n\t\t\t\t\tcase \"end\":\n\t\t\t\t\tcase \"backspace\":\n\t\t\t\t\tcase \"left\":\n\t\t\t\t\tcase \"right\":\n\t\t\t\t\tcase \"up\":\n\t\t\t\t\tcase \"down\":\n\t\t\t\t\t\t_res = node.navigate(event.which, activate);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\thandled = false;\n\t\t\t\t}\n\t\t\t\tif (handled) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// /** Default handling for mouse keypress events. */\n\t\t\t// nodeKeypress: function(ctx) {\n\t\t\t//     var event = ctx.originalEvent;\n\t\t\t// },\n\n\t\t\t// /** Trigger lazyLoad event (async). */\n\t\t\t// nodeLazyLoad: function(ctx) {\n\t\t\t//     var node = ctx.node;\n\t\t\t//     if(this._triggerNodeEvent())\n\t\t\t// },\n\t\t\t/** Load child nodes (async).\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {object[]|object|string|$.Promise|function} source\n\t\t\t * @returns {$.Promise} The deferred will be resolved as soon as the (ajax)\n\t\t\t *     data was rendered.\n\t\t\t */\n\t\t\tnodeLoadChildren: function (ctx, source) {\n\t\t\t\tvar ajax,\n\t\t\t\t\tdelay,\n\t\t\t\t\tajaxDfd = null,\n\t\t\t\t\tresultDfd,\n\t\t\t\t\tisAsync = true,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\tnodePrevParent = node.parent,\n\t\t\t\t\ttag = \"nodeLoadChildren\",\n\t\t\t\t\trequestId = Date.now();\n\n\t\t\t\t// `source` is a callback: use the returned result instead:\n\t\t\t\tif (_isFunction(source)) {\n\t\t\t\t\tsource = source.call(tree, { type: \"source\" }, ctx);\n\t\t\t\t\t_assert(\n\t\t\t\t\t\t!_isFunction(source),\n\t\t\t\t\t\t\"source callback must not return another function\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// `source` is already a promise:\n\t\t\t\tif (_isFunction(source.then)) {\n\t\t\t\t\t// _assert(_isFunction(source.always), \"Expected jQuery?\");\n\t\t\t\t\tajaxDfd = source;\n\t\t\t\t} else if (source.url) {\n\t\t\t\t\t// `source` is an Ajax options object\n\t\t\t\t\tajax = $.extend({}, ctx.options.ajax, source);\n\t\t\t\t\tif (ajax.debugDelay) {\n\t\t\t\t\t\t// Simulate a slow server\n\t\t\t\t\t\tdelay = ajax.debugDelay;\n\t\t\t\t\t\tdelete ajax.debugDelay; // remove debug option\n\t\t\t\t\t\tif (_isArray(delay)) {\n\t\t\t\t\t\t\t// random delay range [min..max]\n\t\t\t\t\t\t\tdelay =\n\t\t\t\t\t\t\t\tdelay[0] +\n\t\t\t\t\t\t\t\tMath.random() * (delay[1] - delay[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\"nodeLoadChildren waiting debugDelay \" +\n\t\t\t\t\t\t\t\tMath.round(delay) +\n\t\t\t\t\t\t\t\t\" ms ...\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tajaxDfd = $.Deferred(function (ajaxDfd) {\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t$.ajax(ajax)\n\t\t\t\t\t\t\t\t\t.done(function () {\n\t\t\t\t\t\t\t\t\t\tajaxDfd.resolveWith(this, arguments);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.fail(function () {\n\t\t\t\t\t\t\t\t\t\tajaxDfd.rejectWith(this, arguments);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}, delay);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tajaxDfd = $.ajax(ajax);\n\t\t\t\t\t}\n\t\t\t\t} else if ($.isPlainObject(source) || _isArray(source)) {\n\t\t\t\t\t// `source` is already a constant dict or list, but we convert\n\t\t\t\t\t// to a thenable for unified processing.\n\t\t\t\t\t// 2020-01-03: refactored.\n\t\t\t\t\t// `ajaxDfd = $.when(source)` would do the trick, but the returned\n\t\t\t\t\t// promise will resolve async, which broke some tests and\n\t\t\t\t\t// would probably also break current implementations out there.\n\t\t\t\t\t// So we mock-up a thenable that resolves synchronously:\n\t\t\t\t\tajaxDfd = {\n\t\t\t\t\t\tthen: function (resolve, reject) {\n\t\t\t\t\t\t\tresolve(source, null, null);\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tisAsync = false;\n\t\t\t\t} else {\n\t\t\t\t\t$.error(\"Invalid source type: \" + source);\n\t\t\t\t}\n\n\t\t\t\t// Check for overlapping requests\n\t\t\t\tif (node._requestId) {\n\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\"Recursive load request #\" +\n\t\t\t\t\t\t\trequestId +\n\t\t\t\t\t\t\t\" while #\" +\n\t\t\t\t\t\t\tnode._requestId +\n\t\t\t\t\t\t\t\" is pending.\"\n\t\t\t\t\t);\n\t\t\t\t\tnode._requestId = requestId;\n\t\t\t\t\t// \tnode.debug(\"Send load request #\" + requestId);\n\t\t\t\t}\n\n\t\t\t\tif (isAsync) {\n\t\t\t\t\ttree.debugTime(tag);\n\t\t\t\t\ttree.nodeSetStatus(ctx, \"loading\");\n\t\t\t\t}\n\n\t\t\t\t// The async Ajax request has now started...\n\t\t\t\t// Defer the deferred:\n\t\t\t\t// we want to be able to reject invalid responses, even if\n\t\t\t\t// the raw HTTP Ajax XHR resolved as Ok.\n\t\t\t\t// We use the ajaxDfd.then() syntax here, which is compatible with\n\t\t\t\t// jQuery and ECMA6.\n\t\t\t\t// However resultDfd is a jQuery deferred, which is currently the\n\t\t\t\t// expected result type of nodeLoadChildren()\n\t\t\t\tresultDfd = new $.Deferred();\n\t\t\t\tajaxDfd.then(\n\t\t\t\t\tfunction (data, textStatus, jqXHR) {\n\t\t\t\t\t\t// ajaxDfd was resolved, but we reject or resolve resultDfd\n\t\t\t\t\t\t// depending on the response data\n\t\t\t\t\t\tvar errorObj, res;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(source.dataType === \"json\" ||\n\t\t\t\t\t\t\t\tsource.dataType === \"jsonp\") &&\n\t\t\t\t\t\t\ttypeof data === \"string\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t$.error(\n\t\t\t\t\t\t\t\t\"Ajax request returned a string (did you get the JSON dataType wrong?).\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (node._requestId && node._requestId > requestId) {\n\t\t\t\t\t\t\t// The expected request time stamp is later than `requestId`\n\t\t\t\t\t\t\t// (which was kept as as closure variable to this handler function)\n\t\t\t\t\t\t\t// node.warn(\"Ignored load response for obsolete request #\" + requestId + \" (expected #\" + node._requestId + \")\");\n\t\t\t\t\t\t\tresultDfd.rejectWith(this, [\n\t\t\t\t\t\t\t\tRECURSIVE_REQUEST_ERROR,\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t// } else {\n\t\t\t\t\t\t\t// \tnode.debug(\"Response returned for load request #\" + requestId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (node.parent === null && nodePrevParent !== null) {\n\t\t\t\t\t\t\tresultDfd.rejectWith(this, [\n\t\t\t\t\t\t\t\tINVALID_REQUEST_TARGET_ERROR,\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow to adjust the received response data in the `postProcess` event.\n\t\t\t\t\t\tif (ctx.options.postProcess) {\n\t\t\t\t\t\t\t// The handler may either\n\t\t\t\t\t\t\t//   - modify `ctx.response` in-place (and leave `ctx.result` undefined)\n\t\t\t\t\t\t\t//     => res = undefined\n\t\t\t\t\t\t\t//   - return a replacement in `ctx.result`\n\t\t\t\t\t\t\t//     => res = <new data>\n\t\t\t\t\t\t\t//   If res contains an `error` property, an error status is displayed\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tres = tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\"postProcess\",\n\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\tctx.originalEvent,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tresponse: data,\n\t\t\t\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t\t\t\t\tdataType: source.dataType,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (res.error) {\n\t\t\t\t\t\t\t\t\ttree.warn(\n\t\t\t\t\t\t\t\t\t\t\"postProcess returned error:\",\n\t\t\t\t\t\t\t\t\t\tres\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tres = {\n\t\t\t\t\t\t\t\t\terror: e,\n\t\t\t\t\t\t\t\t\tmessage: \"\" + e,\n\t\t\t\t\t\t\t\t\tdetails: \"postProcess failed\",\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (res.error) {\n\t\t\t\t\t\t\t\t// Either postProcess failed with an exception, or the returned\n\t\t\t\t\t\t\t\t// result object has an 'error' property attached:\n\t\t\t\t\t\t\t\terrorObj = $.isPlainObject(res.error)\n\t\t\t\t\t\t\t\t\t? res.error\n\t\t\t\t\t\t\t\t\t: { message: res.error };\n\t\t\t\t\t\t\t\terrorObj = tree._makeHookContext(\n\t\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\terrorObj\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tresultDfd.rejectWith(this, [errorObj]);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t_isArray(res) ||\n\t\t\t\t\t\t\t\t($.isPlainObject(res) && _isArray(res.children))\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// Use `ctx.result` if valid\n\t\t\t\t\t\t\t\t// (otherwise use existing data, which may have been modified in-place)\n\t\t\t\t\t\t\t\tdata = res;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tdata &&\n\t\t\t\t\t\t\t_hasProp(data, \"d\") &&\n\t\t\t\t\t\t\tctx.options.enableAspx\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Process ASPX WebMethod JSON object inside \"d\" property\n\t\t\t\t\t\t\t// (only if no postProcess event was defined)\n\t\t\t\t\t\t\tif (ctx.options.enableAspx === 42) {\n\t\t\t\t\t\t\t\ttree.warn(\n\t\t\t\t\t\t\t\t\t\"The default for enableAspx will change to `false` in the fututure. \" +\n\t\t\t\t\t\t\t\t\t\t\"Pass `enableAspx: true` or implement postProcess to silence this warning.\"\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdata =\n\t\t\t\t\t\t\t\ttypeof data.d === \"string\"\n\t\t\t\t\t\t\t\t\t? $.parseJSON(data.d)\n\t\t\t\t\t\t\t\t\t: data.d;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresultDfd.resolveWith(this, [data]);\n\t\t\t\t\t},\n\t\t\t\t\tfunction (jqXHR, textStatus, errorThrown) {\n\t\t\t\t\t\t// ajaxDfd was rejected, so we reject resultDfd as well\n\t\t\t\t\t\tvar errorObj = tree._makeHookContext(node, null, {\n\t\t\t\t\t\t\terror: jqXHR,\n\t\t\t\t\t\t\targs: Array.prototype.slice.call(arguments),\n\t\t\t\t\t\t\tmessage: errorThrown,\n\t\t\t\t\t\t\tdetails: jqXHR.status + \": \" + errorThrown,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tresultDfd.rejectWith(this, [errorObj]);\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// The async Ajax request has now started.\n\t\t\t\t// resultDfd will be resolved/rejected after the response arrived,\n\t\t\t\t// was postProcessed, and checked.\n\t\t\t\t// Now we implement the UI update and add the data to the tree.\n\t\t\t\t// We also return this promise to the caller.\n\t\t\t\tresultDfd\n\t\t\t\t\t.done(function (data) {\n\t\t\t\t\t\ttree.nodeSetStatus(ctx, \"ok\");\n\t\t\t\t\t\tvar children, metaData, noDataRes;\n\n\t\t\t\t\t\tif ($.isPlainObject(data)) {\n\t\t\t\t\t\t\t// We got {foo: 'abc', children: [...]}\n\t\t\t\t\t\t\t// Copy extra properties to tree.data.foo\n\t\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\t\tnode.isRootNode(),\n\t\t\t\t\t\t\t\t\"source may only be an object for root nodes (expecting an array of child objects otherwise)\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\t\t_isArray(data.children),\n\t\t\t\t\t\t\t\t\"if an object is passed as source, it must contain a 'children' array (all other properties are added to 'tree.data')\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tmetaData = data;\n\t\t\t\t\t\t\tchildren = data.children;\n\t\t\t\t\t\t\tdelete metaData.children;\n\t\t\t\t\t\t\t// Copy some attributes to tree.data\n\t\t\t\t\t\t\t$.each(TREE_ATTRS, function (i, attr) {\n\t\t\t\t\t\t\t\tif (metaData[attr] !== undefined) {\n\t\t\t\t\t\t\t\t\ttree[attr] = metaData[attr];\n\t\t\t\t\t\t\t\t\tdelete metaData[attr];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// Copy all other attributes to tree.data.NAME\n\t\t\t\t\t\t\t$.extend(tree.data, metaData);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchildren = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\t_isArray(children),\n\t\t\t\t\t\t\t\"expected array of children\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnode._setChildren(children);\n\n\t\t\t\t\t\tif (tree.options.nodata && children.length === 0) {\n\t\t\t\t\t\t\tif (_isFunction(tree.options.nodata)) {\n\t\t\t\t\t\t\t\tnoDataRes = tree.options.nodata.call(\n\t\t\t\t\t\t\t\t\ttree,\n\t\t\t\t\t\t\t\t\t{ type: \"nodata\" },\n\t\t\t\t\t\t\t\t\tctx\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\ttree.options.nodata === true &&\n\t\t\t\t\t\t\t\tnode.isRootNode()\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnoDataRes = tree.options.strings.noData;\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\ttypeof tree.options.nodata === \"string\" &&\n\t\t\t\t\t\t\t\tnode.isRootNode()\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnoDataRes = tree.options.nodata;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (noDataRes) {\n\t\t\t\t\t\t\t\tnode.setStatus(\"nodata\", noDataRes);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// trigger fancytreeloadchildren\n\t\t\t\t\t\ttree._triggerNodeEvent(\"loadChildren\", node);\n\t\t\t\t\t})\n\t\t\t\t\t.fail(function (error) {\n\t\t\t\t\t\tvar ctxErr;\n\n\t\t\t\t\t\tif (error === RECURSIVE_REQUEST_ERROR) {\n\t\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\t\"Ignored response for obsolete load request #\" +\n\t\t\t\t\t\t\t\t\trequestId +\n\t\t\t\t\t\t\t\t\t\" (expected #\" +\n\t\t\t\t\t\t\t\t\tnode._requestId +\n\t\t\t\t\t\t\t\t\t\")\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} else if (error === INVALID_REQUEST_TARGET_ERROR) {\n\t\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\t\"Lazy parent node was removed while loading: discarding response.\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} else if (error.node && error.error && error.message) {\n\t\t\t\t\t\t\t// error is already a context object\n\t\t\t\t\t\t\tctxErr = error;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctxErr = tree._makeHookContext(node, null, {\n\t\t\t\t\t\t\t\terror: error, // it can be jqXHR or any custom error\n\t\t\t\t\t\t\t\targs: Array.prototype.slice.call(arguments),\n\t\t\t\t\t\t\t\tmessage: error\n\t\t\t\t\t\t\t\t\t? error.message || error.toString()\n\t\t\t\t\t\t\t\t\t: \"\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (ctxErr.message === \"[object Object]\") {\n\t\t\t\t\t\t\t\tctxErr.message = \"\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\"Load children failed (\" + ctxErr.message + \")\",\n\t\t\t\t\t\t\tctxErr\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\"loadError\",\n\t\t\t\t\t\t\t\tctxErr,\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t) !== false\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttree.nodeSetStatus(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\t\t\tctxErr.message,\n\t\t\t\t\t\t\t\tctxErr.details\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.always(function () {\n\t\t\t\t\t\tnode._requestId = null;\n\t\t\t\t\t\tif (isAsync) {\n\t\t\t\t\t\t\ttree.debugTimeEnd(tag);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\treturn resultDfd.promise();\n\t\t\t},\n\t\t\t/** [Not Implemented]  */\n\t\t\tnodeLoadKeyPath: function (ctx, keyPathList) {\n\t\t\t\t// TODO: implement and improve\n\t\t\t\t// http://code.google.com/p/dynatree/issues/detail?id=222\n\t\t\t},\n\t\t\t/**\n\t\t\t * Remove a single direct child of ctx.node.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {FancytreeNode} childNode dircect child of ctx.node\n\t\t\t */\n\t\t\tnodeRemoveChild: function (ctx, childNode) {\n\t\t\t\tvar idx,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\t// opts = ctx.options,\n\t\t\t\t\tsubCtx = $.extend({}, ctx, { node: childNode }),\n\t\t\t\t\tchildren = node.children;\n\n\t\t\t\t// FT.debug(\"nodeRemoveChild()\", node.toString(), childNode.toString());\n\n\t\t\t\tif (children.length === 1) {\n\t\t\t\t\t_assert(childNode === children[0], \"invalid single child\");\n\t\t\t\t\treturn this.nodeRemoveChildren(ctx);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tthis.activeNode &&\n\t\t\t\t\t(childNode === this.activeNode ||\n\t\t\t\t\t\tthis.activeNode.isDescendantOf(childNode))\n\t\t\t\t) {\n\t\t\t\t\tthis.activeNode.setActive(false); // TODO: don't fire events\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tthis.focusNode &&\n\t\t\t\t\t(childNode === this.focusNode ||\n\t\t\t\t\t\tthis.focusNode.isDescendantOf(childNode))\n\t\t\t\t) {\n\t\t\t\t\tthis.focusNode = null;\n\t\t\t\t}\n\t\t\t\t// TODO: persist must take care to clear select and expand cookies\n\t\t\t\tthis.nodeRemoveMarkup(subCtx);\n\t\t\t\tthis.nodeRemoveChildren(subCtx);\n\t\t\t\tidx = $.inArray(childNode, children);\n\t\t\t\t_assert(idx >= 0, \"invalid child\");\n\t\t\t\t// Notify listeners\n\t\t\t\tnode.triggerModifyChild(\"remove\", childNode);\n\t\t\t\t// Unlink to support GC\n\t\t\t\tchildNode.visit(function (n) {\n\t\t\t\t\tn.parent = null;\n\t\t\t\t}, true);\n\t\t\t\tthis._callHook(\"treeRegisterNode\", this, false, childNode);\n\t\t\t\t// remove from child list\n\t\t\t\tchildren.splice(idx, 1);\n\t\t\t},\n\t\t\t/**Remove HTML markup for all descendents of ctx.node.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeRemoveChildMarkup: function (ctx) {\n\t\t\t\tvar node = ctx.node;\n\n\t\t\t\t// FT.debug(\"nodeRemoveChildMarkup()\", node.toString());\n\t\t\t\t// TODO: Unlink attr.ftnode to support GC\n\t\t\t\tif (node.ul) {\n\t\t\t\t\tif (node.isRootNode()) {\n\t\t\t\t\t\t$(node.ul).empty();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(node.ul).remove();\n\t\t\t\t\t\tnode.ul = null;\n\t\t\t\t\t}\n\t\t\t\t\tnode.visit(function (n) {\n\t\t\t\t\t\tn.li = n.ul = null;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t/**Remove all descendants of ctx.node.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeRemoveChildren: function (ctx) {\n\t\t\t\tvar //subCtx,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\tchildren = node.children;\n\t\t\t\t// opts = ctx.options;\n\n\t\t\t\t// FT.debug(\"nodeRemoveChildren()\", node.toString());\n\t\t\t\tif (!children) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (this.activeNode && this.activeNode.isDescendantOf(node)) {\n\t\t\t\t\tthis.activeNode.setActive(false); // TODO: don't fire events\n\t\t\t\t}\n\t\t\t\tif (this.focusNode && this.focusNode.isDescendantOf(node)) {\n\t\t\t\t\tthis.focusNode = null;\n\t\t\t\t}\n\t\t\t\t// TODO: persist must take care to clear select and expand cookies\n\t\t\t\tthis.nodeRemoveChildMarkup(ctx);\n\t\t\t\t// Unlink children to support GC\n\t\t\t\t// TODO: also delete this.children (not possible using visit())\n\t\t\t\t// subCtx = $.extend({}, ctx);\n\t\t\t\tnode.triggerModifyChild(\"remove\", null);\n\t\t\t\tnode.visit(function (n) {\n\t\t\t\t\tn.parent = null;\n\t\t\t\t\ttree._callHook(\"treeRegisterNode\", tree, false, n);\n\t\t\t\t});\n\t\t\t\tif (node.lazy) {\n\t\t\t\t\t// 'undefined' would be interpreted as 'not yet loaded' for lazy nodes\n\t\t\t\t\tnode.children = [];\n\t\t\t\t} else {\n\t\t\t\t\tnode.children = null;\n\t\t\t\t}\n\t\t\t\tif (!node.isRootNode()) {\n\t\t\t\t\tnode.expanded = false; // #449, #459\n\t\t\t\t}\n\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t},\n\t\t\t/**Remove HTML markup for ctx.node and all its descendents.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeRemoveMarkup: function (ctx) {\n\t\t\t\tvar node = ctx.node;\n\t\t\t\t// FT.debug(\"nodeRemoveMarkup()\", node.toString());\n\t\t\t\t// TODO: Unlink attr.ftnode to support GC\n\t\t\t\tif (node.li) {\n\t\t\t\t\t$(node.li).remove();\n\t\t\t\t\tnode.li = null;\n\t\t\t\t}\n\t\t\t\tthis.nodeRemoveChildMarkup(ctx);\n\t\t\t},\n\t\t\t/**\n\t\t\t * Create `<li><span>..</span> .. </li>` tags for this node.\n\t\t\t *\n\t\t\t * This method takes care that all HTML markup is created that is required\n\t\t\t * to display this node in its current state.\n\t\t\t *\n\t\t\t * Call this method to create new nodes, or after the strucuture\n\t\t\t * was changed (e.g. after moving this node or adding/removing children)\n\t\t\t * nodeRenderTitle() and nodeRenderStatus() are implied.\n\t\t\t *\n\t\t\t * ```html\n\t\t\t * <li id='KEY' ftnode=NODE>\n\t\t\t *     <span class='fancytree-node fancytree-expanded fancytree-has-children fancytree-lastsib fancytree-exp-el fancytree-ico-e'>\n\t\t\t *         <span class=\"fancytree-expander\"></span>\n\t\t\t *         <span class=\"fancytree-checkbox\"></span> // only present in checkbox mode\n\t\t\t *         <span class=\"fancytree-icon\"></span>\n\t\t\t *         <a href=\"#\" class=\"fancytree-title\"> Node 1 </a>\n\t\t\t *     </span>\n\t\t\t *     <ul> // only present if node has children\n\t\t\t *         <li id='KEY' ftnode=NODE> child1 ... </li>\n\t\t\t *         <li id='KEY' ftnode=NODE> child2 ... </li>\n\t\t\t *     </ul>\n\t\t\t * </li>\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [force=false] re-render, even if html markup was already created\n\t\t\t * @param {boolean} [deep=false] also render all descendants, even if parent is collapsed\n\t\t\t * @param {boolean} [collapsed=false] force root node to be collapsed, so we can apply animated expand later\n\t\t\t */\n\t\t\tnodeRender: function (ctx, force, deep, collapsed, _recursive) {\n\t\t\t\t/* This method must take care of all cases where the current data mode\n\t\t\t\t * (i.e. node hierarchy) does not match the current markup.\n\t\t\t\t *\n\t\t\t\t * - node was not yet rendered:\n\t\t\t\t *   create markup\n\t\t\t\t * - node was rendered: exit fast\n\t\t\t\t * - children have been added\n\t\t\t\t * - children have been removed\n\t\t\t\t */\n\t\t\t\tvar childLI,\n\t\t\t\t\tchildNode1,\n\t\t\t\t\tchildNode2,\n\t\t\t\t\ti,\n\t\t\t\t\tl,\n\t\t\t\t\tnext,\n\t\t\t\t\tsubCtx,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\taria = opts.aria,\n\t\t\t\t\tfirstTime = false,\n\t\t\t\t\tparent = node.parent,\n\t\t\t\t\tisRootNode = !parent,\n\t\t\t\t\tchildren = node.children,\n\t\t\t\t\tsuccessorLi = null;\n\t\t\t\t// FT.debug(\"nodeRender(\" + !!force + \", \" + !!deep + \")\", node.toString());\n\n\t\t\t\tif (tree._enableUpdate === false) {\n\t\t\t\t\t// tree.debug(\"no render\", tree._enableUpdate);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!isRootNode && !parent.ul) {\n\t\t\t\t\t// Calling node.collapse on a deep, unrendered node\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t_assert(isRootNode || parent.ul, \"parent UL must exist\");\n\n\t\t\t\t// Render the node\n\t\t\t\tif (!isRootNode) {\n\t\t\t\t\t// Discard markup on force-mode, or if it is not linked to parent <ul>\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.li &&\n\t\t\t\t\t\t(force || node.li.parentNode !== node.parent.ul)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (node.li.parentNode === node.parent.ul) {\n\t\t\t\t\t\t\t// #486: store following node, so we can insert the new markup there later\n\t\t\t\t\t\t\tsuccessorLi = node.li.nextSibling;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// May happen, when a top-level node was dropped over another\n\t\t\t\t\t\t\tthis.debug(\n\t\t\t\t\t\t\t\t\"Unlinking \" +\n\t\t\t\t\t\t\t\t\tnode +\n\t\t\t\t\t\t\t\t\t\" (must be child of \" +\n\t\t\t\t\t\t\t\t\tnode.parent +\n\t\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\t//\t            this.debug(\"nodeRemoveMarkup...\");\n\t\t\t\t\t\tthis.nodeRemoveMarkup(ctx);\n\t\t\t\t\t}\n\t\t\t\t\t// Create <li><span /> </li>\n\t\t\t\t\t// node.debug(\"render...\");\n\t\t\t\t\tif (node.li) {\n\t\t\t\t\t\t// this.nodeRenderTitle(ctx);\n\t\t\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// node.debug(\"render... really\");\n\t\t\t\t\t\tfirstTime = true;\n\t\t\t\t\t\tnode.li = document.createElement(\"li\");\n\t\t\t\t\t\tnode.li.ftnode = node;\n\n\t\t\t\t\t\tif (node.key && opts.generateIds) {\n\t\t\t\t\t\t\tnode.li.id = opts.idPrefix + node.key;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.span = document.createElement(\"span\");\n\t\t\t\t\t\tnode.span.className = \"fancytree-node\";\n\t\t\t\t\t\tif (aria && !node.tr) {\n\t\t\t\t\t\t\t$(node.li).attr(\"role\", \"treeitem\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.li.appendChild(node.span);\n\n\t\t\t\t\t\t// Create inner HTML for the <span> (expander, checkbox, icon, and title)\n\t\t\t\t\t\tthis.nodeRenderTitle(ctx);\n\n\t\t\t\t\t\t// Allow tweaking and binding, after node was created for the first time\n\t\t\t\t\t\tif (opts.createNode) {\n\t\t\t\t\t\t\topts.createNode.call(\n\t\t\t\t\t\t\t\ttree,\n\t\t\t\t\t\t\t\t{ type: \"createNode\" },\n\t\t\t\t\t\t\t\tctx\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// Allow tweaking after node state was rendered\n\t\t\t\t\tif (opts.renderNode) {\n\t\t\t\t\t\topts.renderNode.call(tree, { type: \"renderNode\" }, ctx);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Visit child nodes\n\t\t\t\tif (children) {\n\t\t\t\t\tif (isRootNode || node.expanded || deep === true) {\n\t\t\t\t\t\t// Create a UL to hold the children\n\t\t\t\t\t\tif (!node.ul) {\n\t\t\t\t\t\t\tnode.ul = document.createElement(\"ul\");\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(collapsed === true && !_recursive) ||\n\t\t\t\t\t\t\t\t!node.expanded\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// hide top UL, so we can use an animation to show it later\n\t\t\t\t\t\t\t\tnode.ul.style.display = \"none\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (aria) {\n\t\t\t\t\t\t\t\t$(node.ul).attr(\"role\", \"group\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (node.li) {\n\t\t\t\t\t\t\t\t// issue #67\n\t\t\t\t\t\t\t\tnode.li.appendChild(node.ul);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnode.tree.$div.append(node.ul);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Add child markup\n\t\t\t\t\t\tfor (i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\t\t\tsubCtx = $.extend({}, ctx, { node: children[i] });\n\t\t\t\t\t\t\tthis.nodeRender(subCtx, force, deep, false, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Remove <li> if nodes have moved to another parent\n\t\t\t\t\t\tchildLI = node.ul.firstChild;\n\t\t\t\t\t\twhile (childLI) {\n\t\t\t\t\t\t\tchildNode2 = childLI.ftnode;\n\t\t\t\t\t\t\tif (childNode2 && childNode2.parent !== node) {\n\t\t\t\t\t\t\t\tnode.debug(\n\t\t\t\t\t\t\t\t\t\"_fixParent: remove missing \" + childNode2,\n\t\t\t\t\t\t\t\t\tchildLI\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tnext = childLI.nextSibling;\n\t\t\t\t\t\t\t\tchildLI.parentNode.removeChild(childLI);\n\t\t\t\t\t\t\t\tchildLI = next;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tchildLI = childLI.nextSibling;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Make sure, that <li> order matches node.children order.\n\t\t\t\t\t\tchildLI = node.ul.firstChild;\n\t\t\t\t\t\tfor (i = 0, l = children.length - 1; i < l; i++) {\n\t\t\t\t\t\t\tchildNode1 = children[i];\n\t\t\t\t\t\t\tchildNode2 = childLI.ftnode;\n\t\t\t\t\t\t\tif (childNode1 === childNode2) {\n\t\t\t\t\t\t\t\tchildLI = childLI.nextSibling;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// node.debug(\"_fixOrder: mismatch at index \" + i + \": \" + childNode1 + \" != \" + childNode2);\n\t\t\t\t\t\t\t\tnode.ul.insertBefore(\n\t\t\t\t\t\t\t\t\tchildNode1.li,\n\t\t\t\t\t\t\t\t\tchildNode2.li\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} else {\n\t\t\t\t\t// No children: remove markup if any\n\t\t\t\t\tif (node.ul) {\n\t\t\t\t\t\t// alert(\"remove child markup for \" + node);\n\t\t\t\t\t\tthis.warn(\"remove child markup for \" + node);\n\t\t\t\t\t\tthis.nodeRemoveChildMarkup(ctx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isRootNode) {\n\t\t\t\t\t// Update element classes according to node state\n\t\t\t\t\t// this.nodeRenderStatus(ctx);\n\t\t\t\t\t// Finally add the whole structure to the DOM, so the browser can render\n\t\t\t\t\tif (firstTime) {\n\t\t\t\t\t\t// #486: successorLi is set, if we re-rendered (i.e. discarded)\n\t\t\t\t\t\t// existing markup, which  we want to insert at the same position.\n\t\t\t\t\t\t// (null is equivalent to append)\n\t\t\t\t\t\t// \t\tparent.ul.appendChild(node.li);\n\t\t\t\t\t\tparent.ul.insertBefore(node.li, successorLi);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Create HTML inside the node's outer `<span>` (i.e. expander, checkbox,\n\t\t\t * icon, and title).\n\t\t\t *\n\t\t\t * nodeRenderStatus() is implied.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {string} [title] optinal new title\n\t\t\t */\n\t\t\tnodeRenderTitle: function (ctx, title) {\n\t\t\t\t// set node connector images, links and text\n\t\t\t\tvar checkbox,\n\t\t\t\t\tclassName,\n\t\t\t\t\ticon,\n\t\t\t\t\tnodeTitle,\n\t\t\t\t\trole,\n\t\t\t\t\ttabindex,\n\t\t\t\t\ttooltip,\n\t\t\t\t\ticonTooltip,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\taria = opts.aria,\n\t\t\t\t\tlevel = node.getLevel(),\n\t\t\t\t\tares = [];\n\n\t\t\t\tif (title !== undefined) {\n\t\t\t\t\tnode.title = title;\n\t\t\t\t}\n\t\t\t\tif (!node.span || tree._enableUpdate === false) {\n\t\t\t\t\t// Silently bail out if node was not rendered yet, assuming\n\t\t\t\t\t// node.render() will be called as the node becomes visible\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Connector (expanded, expandable or simple)\n\t\t\t\trole =\n\t\t\t\t\taria && node.hasChildren() !== false\n\t\t\t\t\t\t? \" role='button'\"\n\t\t\t\t\t\t: \"\";\n\t\t\t\tif (level < opts.minExpandLevel) {\n\t\t\t\t\tif (!node.lazy) {\n\t\t\t\t\t\tnode.expanded = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (level > 1) {\n\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\"<span \" +\n\t\t\t\t\t\t\t\trole +\n\t\t\t\t\t\t\t\t\" class='fancytree-expander fancytree-expander-fixed'></span>\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// .. else (i.e. for root level) skip expander/connector alltogether\n\t\t\t\t} else {\n\t\t\t\t\tares.push(\n\t\t\t\t\t\t\"<span \" + role + \" class='fancytree-expander'></span>\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Checkbox mode\n\t\t\t\tcheckbox = FT.evalOption(\"checkbox\", node, node, opts, false);\n\n\t\t\t\tif (checkbox && !node.isStatusNode()) {\n\t\t\t\t\trole = aria ? \" role='checkbox'\" : \"\";\n\t\t\t\t\tclassName = \"fancytree-checkbox\";\n\t\t\t\t\tif (\n\t\t\t\t\t\tcheckbox === \"radio\" ||\n\t\t\t\t\t\t(node.parent && node.parent.radiogroup)\n\t\t\t\t\t) {\n\t\t\t\t\t\tclassName += \" fancytree-radio\";\n\t\t\t\t\t}\n\t\t\t\t\tares.push(\n\t\t\t\t\t\t\"<span \" + role + \" class='\" + className + \"'></span>\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Folder or doctype icon\n\t\t\t\tif (node.data.iconClass !== undefined) {\n\t\t\t\t\t// 2015-11-16\n\t\t\t\t\t// Handle / warn about backward compatibility\n\t\t\t\t\tif (node.icon) {\n\t\t\t\t\t\t$.error(\n\t\t\t\t\t\t\t\"'iconClass' node option is deprecated since v2.14.0: use 'icon' only instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\"'iconClass' node option is deprecated since v2.14.0: use 'icon' instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnode.icon = node.data.iconClass;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If opts.icon is a callback and returns something other than undefined, use that\n\t\t\t\t// else if node.icon is a boolean or string, use that\n\t\t\t\t// else if opts.icon is a boolean or string, use that\n\t\t\t\t// else show standard icon (which may be different for folders or documents)\n\t\t\t\ticon = FT.evalOption(\"icon\", node, node, opts, true);\n\t\t\t\t// if( typeof icon !== \"boolean\" ) {\n\t\t\t\t// \t// icon is defined, but not true/false: must be a string\n\t\t\t\t// \ticon = \"\" + icon;\n\t\t\t\t// }\n\t\t\t\tif (icon !== false) {\n\t\t\t\t\trole = aria ? \" role='presentation'\" : \"\";\n\n\t\t\t\t\ticonTooltip = FT.evalOption(\n\t\t\t\t\t\t\"iconTooltip\",\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\topts,\n\t\t\t\t\t\tnull\n\t\t\t\t\t);\n\t\t\t\t\ticonTooltip = iconTooltip\n\t\t\t\t\t\t? \" title='\" + _escapeTooltip(iconTooltip) + \"'\"\n\t\t\t\t\t\t: \"\";\n\n\t\t\t\t\tif (typeof icon === \"string\") {\n\t\t\t\t\t\tif (TEST_IMG.test(icon)) {\n\t\t\t\t\t\t\t// node.icon is an image url. Prepend imagePath\n\t\t\t\t\t\t\ticon =\n\t\t\t\t\t\t\t\ticon.charAt(0) === \"/\"\n\t\t\t\t\t\t\t\t\t? icon\n\t\t\t\t\t\t\t\t\t: (opts.imagePath || \"\") + icon;\n\t\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\t\"<img src='\" +\n\t\t\t\t\t\t\t\t\ticon +\n\t\t\t\t\t\t\t\t\t\"' class='fancytree-icon'\" +\n\t\t\t\t\t\t\t\t\ticonTooltip +\n\t\t\t\t\t\t\t\t\t\" alt='' />\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\t\"<span \" +\n\t\t\t\t\t\t\t\t\trole +\n\t\t\t\t\t\t\t\t\t\" class='fancytree-custom-icon \" +\n\t\t\t\t\t\t\t\t\ticon +\n\t\t\t\t\t\t\t\t\t\"'\" +\n\t\t\t\t\t\t\t\t\ticonTooltip +\n\t\t\t\t\t\t\t\t\t\"></span>\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (icon.text) {\n\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\"<span \" +\n\t\t\t\t\t\t\t\trole +\n\t\t\t\t\t\t\t\t\" class='fancytree-custom-icon \" +\n\t\t\t\t\t\t\t\t(icon.addClass || \"\") +\n\t\t\t\t\t\t\t\t\"'\" +\n\t\t\t\t\t\t\t\ticonTooltip +\n\t\t\t\t\t\t\t\t\">\" +\n\t\t\t\t\t\t\t\tFT.escapeHtml(icon.text) +\n\t\t\t\t\t\t\t\t\"</span>\"\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (icon.html) {\n\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\"<span \" +\n\t\t\t\t\t\t\t\trole +\n\t\t\t\t\t\t\t\t\" class='fancytree-custom-icon \" +\n\t\t\t\t\t\t\t\t(icon.addClass || \"\") +\n\t\t\t\t\t\t\t\t\"'\" +\n\t\t\t\t\t\t\t\ticonTooltip +\n\t\t\t\t\t\t\t\t\">\" +\n\t\t\t\t\t\t\t\ticon.html +\n\t\t\t\t\t\t\t\t\"</span>\"\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// standard icon: theme css will take care of this\n\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\"<span \" +\n\t\t\t\t\t\t\t\trole +\n\t\t\t\t\t\t\t\t\" class='fancytree-icon'\" +\n\t\t\t\t\t\t\t\ticonTooltip +\n\t\t\t\t\t\t\t\t\"></span>\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Node title\n\t\t\t\tnodeTitle = \"\";\n\t\t\t\tif (opts.renderTitle) {\n\t\t\t\t\tnodeTitle =\n\t\t\t\t\t\topts.renderTitle.call(\n\t\t\t\t\t\t\ttree,\n\t\t\t\t\t\t\t{ type: \"renderTitle\" },\n\t\t\t\t\t\t\tctx\n\t\t\t\t\t\t) || \"\";\n\t\t\t\t}\n\t\t\t\tif (!nodeTitle) {\n\t\t\t\t\ttooltip = FT.evalOption(\"tooltip\", node, node, opts, null);\n\t\t\t\t\tif (tooltip === true) {\n\t\t\t\t\t\ttooltip = node.title;\n\t\t\t\t\t}\n\t\t\t\t\t// if( node.tooltip ) {\n\t\t\t\t\t// \ttooltip = node.tooltip;\n\t\t\t\t\t// } else if ( opts.tooltip ) {\n\t\t\t\t\t// \ttooltip = opts.tooltip === true ? node.title : opts.tooltip.call(tree, node);\n\t\t\t\t\t// }\n\t\t\t\t\ttooltip = tooltip\n\t\t\t\t\t\t? \" title='\" + _escapeTooltip(tooltip) + \"'\"\n\t\t\t\t\t\t: \"\";\n\t\t\t\t\ttabindex = opts.titlesTabbable ? \" tabindex='0'\" : \"\";\n\n\t\t\t\t\tnodeTitle =\n\t\t\t\t\t\t\"<span class='fancytree-title'\" +\n\t\t\t\t\t\ttooltip +\n\t\t\t\t\t\ttabindex +\n\t\t\t\t\t\t\">\" +\n\t\t\t\t\t\t(opts.escapeTitles\n\t\t\t\t\t\t\t? FT.escapeHtml(node.title)\n\t\t\t\t\t\t\t: node.title) +\n\t\t\t\t\t\t\"</span>\";\n\t\t\t\t}\n\t\t\t\tares.push(nodeTitle);\n\t\t\t\t// Note: this will trigger focusout, if node had the focus\n\t\t\t\t//$(node.span).html(ares.join(\"\")); // it will cleanup the jQuery data currently associated with SPAN (if any), but it executes more slowly\n\t\t\t\tnode.span.innerHTML = ares.join(\"\");\n\t\t\t\t// Update CSS classes\n\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t\tif (opts.enhanceTitle) {\n\t\t\t\t\tctx.$title = $(\">span.fancytree-title\", node.span);\n\t\t\t\t\tnodeTitle =\n\t\t\t\t\t\topts.enhanceTitle.call(\n\t\t\t\t\t\t\ttree,\n\t\t\t\t\t\t\t{ type: \"enhanceTitle\" },\n\t\t\t\t\t\t\tctx\n\t\t\t\t\t\t) || \"\";\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Update element classes according to node state.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeRenderStatus: function (ctx) {\n\t\t\t\t// Set classes for current status\n\t\t\t\tvar $ariaElem,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\t// \tnodeContainer = node[tree.nodeContainerAttrName],\n\t\t\t\t\thasChildren = node.hasChildren(),\n\t\t\t\t\tisLastSib = node.isLastSibling(),\n\t\t\t\t\taria = opts.aria,\n\t\t\t\t\tcn = opts._classNames,\n\t\t\t\t\tcnList = [],\n\t\t\t\t\tstatusElem = node[tree.statusClassPropName];\n\n\t\t\t\tif (!statusElem || tree._enableUpdate === false) {\n\t\t\t\t\t// if this function is called for an unrendered node, ignore it (will be updated on nect render anyway)\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (aria) {\n\t\t\t\t\t$ariaElem = $(node.tr || node.li);\n\t\t\t\t}\n\t\t\t\t// Build a list of class names that we will add to the node <span>\n\t\t\t\tcnList.push(cn.node);\n\t\t\t\tif (tree.activeNode === node) {\n\t\t\t\t\tcnList.push(cn.active);\n\t\t\t\t\t// \t\t$(\">span.fancytree-title\", statusElem).attr(\"tabindex\", \"0\");\n\t\t\t\t\t// \t\ttree.$container.removeAttr(\"tabindex\");\n\t\t\t\t\t// }else{\n\t\t\t\t\t// \t\t$(\">span.fancytree-title\", statusElem).removeAttr(\"tabindex\");\n\t\t\t\t\t// \t\ttree.$container.attr(\"tabindex\", \"0\");\n\t\t\t\t}\n\t\t\t\tif (tree.focusNode === node) {\n\t\t\t\t\tcnList.push(cn.focused);\n\t\t\t\t}\n\t\t\t\tif (node.expanded) {\n\t\t\t\t\tcnList.push(cn.expanded);\n\t\t\t\t}\n\t\t\t\tif (aria) {\n\t\t\t\t\tif (hasChildren === false) {\n\t\t\t\t\t\t$ariaElem.removeAttr(\"aria-expanded\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$ariaElem.attr(\"aria-expanded\", Boolean(node.expanded));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.folder) {\n\t\t\t\t\tcnList.push(cn.folder);\n\t\t\t\t}\n\t\t\t\tif (hasChildren !== false) {\n\t\t\t\t\tcnList.push(cn.hasChildren);\n\t\t\t\t}\n\t\t\t\t// TODO: required?\n\t\t\t\tif (isLastSib) {\n\t\t\t\t\tcnList.push(cn.lastsib);\n\t\t\t\t}\n\t\t\t\tif (node.lazy && node.children == null) {\n\t\t\t\t\tcnList.push(cn.lazy);\n\t\t\t\t}\n\t\t\t\tif (node.partload) {\n\t\t\t\t\tcnList.push(cn.partload);\n\t\t\t\t}\n\t\t\t\tif (node.partsel) {\n\t\t\t\t\tcnList.push(cn.partsel);\n\t\t\t\t}\n\t\t\t\tif (FT.evalOption(\"unselectable\", node, node, opts, false)) {\n\t\t\t\t\tcnList.push(cn.unselectable);\n\t\t\t\t}\n\t\t\t\tif (node._isLoading) {\n\t\t\t\t\tcnList.push(cn.loading);\n\t\t\t\t}\n\t\t\t\tif (node._error) {\n\t\t\t\t\tcnList.push(cn.error);\n\t\t\t\t}\n\t\t\t\tif (node.statusNodeType) {\n\t\t\t\t\tcnList.push(cn.statusNodePrefix + node.statusNodeType);\n\t\t\t\t}\n\t\t\t\tif (node.selected) {\n\t\t\t\t\tcnList.push(cn.selected);\n\t\t\t\t\tif (aria) {\n\t\t\t\t\t\t$ariaElem.attr(\"aria-selected\", true);\n\t\t\t\t\t}\n\t\t\t\t} else if (aria) {\n\t\t\t\t\t$ariaElem.attr(\"aria-selected\", false);\n\t\t\t\t}\n\t\t\t\tif (node.extraClasses) {\n\t\t\t\t\tcnList.push(node.extraClasses);\n\t\t\t\t}\n\t\t\t\t// IE6 doesn't correctly evaluate multiple class names,\n\t\t\t\t// so we create combined class names that can be used in the CSS\n\t\t\t\tif (hasChildren === false) {\n\t\t\t\t\tcnList.push(\n\t\t\t\t\t\tcn.combinedExpanderPrefix + \"n\" + (isLastSib ? \"l\" : \"\")\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tcnList.push(\n\t\t\t\t\t\tcn.combinedExpanderPrefix +\n\t\t\t\t\t\t\t(node.expanded ? \"e\" : \"c\") +\n\t\t\t\t\t\t\t(node.lazy && node.children == null ? \"d\" : \"\") +\n\t\t\t\t\t\t\t(isLastSib ? \"l\" : \"\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcnList.push(\n\t\t\t\t\tcn.combinedIconPrefix +\n\t\t\t\t\t\t(node.expanded ? \"e\" : \"c\") +\n\t\t\t\t\t\t(node.folder ? \"f\" : \"\")\n\t\t\t\t);\n\t\t\t\t// node.span.className = cnList.join(\" \");\n\t\t\t\tstatusElem.className = cnList.join(\" \");\n\n\t\t\t\t// TODO: we should not set this in the <span> tag also, if we set it here:\n\t\t\t\t// Maybe most (all) of the classes should be set in LI instead of SPAN?\n\t\t\t\tif (node.li) {\n\t\t\t\t\t// #719: we have to consider that there may be already other classes:\n\t\t\t\t\t$(node.li).toggleClass(cn.lastsib, isLastSib);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Activate node.\n\t\t\t * flag defaults to true.\n\t\t\t * If flag is true, the node is activated (must be a synchronous operation)\n\t\t\t * If flag is false, the node is deactivated (must be a synchronous operation)\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [flag=true]\n\t\t\t * @param {object} [opts] additional options. Defaults to {noEvents: false, noFocus: false}\n\t\t\t * @returns {$.Promise}\n\t\t\t */\n\t\t\tnodeSetActive: function (ctx, flag, callOpts) {\n\t\t\t\t// Handle user click / [space] / [enter], according to clickFolderMode.\n\t\t\t\tcallOpts = callOpts || {};\n\t\t\t\tvar subCtx,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\tnoEvents = callOpts.noEvents === true,\n\t\t\t\t\tnoFocus = callOpts.noFocus === true,\n\t\t\t\t\tscroll = callOpts.scrollIntoView !== false,\n\t\t\t\t\tisActive = node === tree.activeNode;\n\n\t\t\t\t// flag defaults to true\n\t\t\t\tflag = flag !== false;\n\t\t\t\t// node.debug(\"nodeSetActive\", flag);\n\n\t\t\t\tif (isActive === flag) {\n\t\t\t\t\t// Nothing to do\n\t\t\t\t\treturn _getResolvedPromise(node);\n\t\t\t\t}\n\t\t\t\t// #1042: don't scroll between mousedown/-up when clicking an embedded link\n\t\t\t\tif (\n\t\t\t\t\tscroll &&\n\t\t\t\t\tctx.originalEvent &&\n\t\t\t\t\t$(ctx.originalEvent.target).is(\"a,:checkbox\")\n\t\t\t\t) {\n\t\t\t\t\tnode.info(\"Not scrolling while clicking an embedded link.\");\n\t\t\t\t\tscroll = false;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tflag &&\n\t\t\t\t\t!noEvents &&\n\t\t\t\t\tthis._triggerNodeEvent(\n\t\t\t\t\t\t\"beforeActivate\",\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tctx.originalEvent\n\t\t\t\t\t) === false\n\t\t\t\t) {\n\t\t\t\t\t// Callback returned false\n\t\t\t\t\treturn _getRejectedPromise(node, [\"rejected\"]);\n\t\t\t\t}\n\t\t\t\tif (flag) {\n\t\t\t\t\tif (tree.activeNode) {\n\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\ttree.activeNode !== node,\n\t\t\t\t\t\t\t\"node was active (inconsistency)\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsubCtx = $.extend({}, ctx, { node: tree.activeNode });\n\t\t\t\t\t\ttree.nodeSetActive(subCtx, false);\n\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\ttree.activeNode === null,\n\t\t\t\t\t\t\t\"deactivate was out of sync?\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (opts.activeVisible) {\n\t\t\t\t\t\t// If no focus is set (noFocus: true) and there is no focused node, this node is made visible.\n\t\t\t\t\t\t// scroll = noFocus && tree.focusNode == null;\n\t\t\t\t\t\t// #863: scroll by default (unless `scrollIntoView: false` was passed)\n\t\t\t\t\t\tnode.makeVisible({ scrollIntoView: scroll });\n\t\t\t\t\t}\n\t\t\t\t\ttree.activeNode = node;\n\t\t\t\t\ttree.nodeRenderStatus(ctx);\n\t\t\t\t\tif (!noFocus) {\n\t\t\t\t\t\ttree.nodeSetFocus(ctx);\n\t\t\t\t\t}\n\t\t\t\t\tif (!noEvents) {\n\t\t\t\t\t\ttree._triggerNodeEvent(\n\t\t\t\t\t\t\t\"activate\",\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tctx.originalEvent\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t_assert(\n\t\t\t\t\t\ttree.activeNode === node,\n\t\t\t\t\t\t\"node was not active (inconsistency)\"\n\t\t\t\t\t);\n\t\t\t\t\ttree.activeNode = null;\n\t\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t\t\tif (!noEvents) {\n\t\t\t\t\t\tctx.tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\"deactivate\",\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tctx.originalEvent\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _getResolvedPromise(node);\n\t\t\t},\n\t\t\t/** Expand or collapse node, return Deferred.promise.\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [flag=true]\n\t\t\t * @param {object} [opts] additional options. Defaults to `{noAnimation: false, noEvents: false}`\n\t\t\t * @returns {$.Promise} The deferred will be resolved as soon as the (lazy)\n\t\t\t *     data was retrieved, rendered, and the expand animation finished.\n\t\t\t */\n\t\t\tnodeSetExpanded: function (ctx, flag, callOpts) {\n\t\t\t\tcallOpts = callOpts || {};\n\t\t\t\tvar _afterLoad,\n\t\t\t\t\tdfd,\n\t\t\t\t\ti,\n\t\t\t\t\tl,\n\t\t\t\t\tparents,\n\t\t\t\t\tprevAC,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\tnoAnimation = callOpts.noAnimation === true,\n\t\t\t\t\tnoEvents = callOpts.noEvents === true;\n\n\t\t\t\t// flag defaults to true\n\t\t\t\tflag = flag !== false;\n\n\t\t\t\t// node.debug(\"nodeSetExpanded(\" + flag + \")\");\n\n\t\t\t\tif ($(node.li).hasClass(opts._classNames.animating)) {\n\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\"setExpanded(\" + flag + \") while animating: ignored.\"\n\t\t\t\t\t);\n\t\t\t\t\treturn _getRejectedPromise(node, [\"recursion\"]);\n\t\t\t\t}\n\n\t\t\t\tif ((node.expanded && flag) || (!node.expanded && !flag)) {\n\t\t\t\t\t// Nothing to do\n\t\t\t\t\t// node.debug(\"nodeSetExpanded(\" + flag + \"): nothing to do\");\n\t\t\t\t\treturn _getResolvedPromise(node);\n\t\t\t\t} else if (flag && !node.lazy && !node.hasChildren()) {\n\t\t\t\t\t// Prevent expanding of empty nodes\n\t\t\t\t\t// return _getRejectedPromise(node, [\"empty\"]);\n\t\t\t\t\treturn _getResolvedPromise(node);\n\t\t\t\t} else if (!flag && node.getLevel() < opts.minExpandLevel) {\n\t\t\t\t\t// Prevent collapsing locked levels\n\t\t\t\t\treturn _getRejectedPromise(node, [\"locked\"]);\n\t\t\t\t} else if (\n\t\t\t\t\t!noEvents &&\n\t\t\t\t\tthis._triggerNodeEvent(\n\t\t\t\t\t\t\"beforeExpand\",\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tctx.originalEvent\n\t\t\t\t\t) === false\n\t\t\t\t) {\n\t\t\t\t\t// Callback returned false\n\t\t\t\t\treturn _getRejectedPromise(node, [\"rejected\"]);\n\t\t\t\t}\n\t\t\t\t// If this node inside a collpased node, no animation and scrolling is needed\n\t\t\t\tif (!noAnimation && !node.isVisible()) {\n\t\t\t\t\tnoAnimation = callOpts.noAnimation = true;\n\t\t\t\t}\n\n\t\t\t\tdfd = new $.Deferred();\n\n\t\t\t\t// Auto-collapse mode: collapse all siblings\n\t\t\t\tif (flag && !node.expanded && opts.autoCollapse) {\n\t\t\t\t\tparents = node.getParentList(false, true);\n\t\t\t\t\tprevAC = opts.autoCollapse;\n\t\t\t\t\ttry {\n\t\t\t\t\t\topts.autoCollapse = false;\n\t\t\t\t\t\tfor (i = 0, l = parents.length; i < l; i++) {\n\t\t\t\t\t\t\t// TODO: should return promise?\n\t\t\t\t\t\t\tthis._callHook(\n\t\t\t\t\t\t\t\t\"nodeCollapseSiblings\",\n\t\t\t\t\t\t\t\tparents[i],\n\t\t\t\t\t\t\t\tcallOpts\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\topts.autoCollapse = prevAC;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger expand/collapse after expanding\n\t\t\t\tdfd.done(function () {\n\t\t\t\t\tvar lastChild = node.getLastChild();\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tflag &&\n\t\t\t\t\t\topts.autoScroll &&\n\t\t\t\t\t\t!noAnimation &&\n\t\t\t\t\t\tlastChild &&\n\t\t\t\t\t\ttree._enableUpdate\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Scroll down to last child, but keep current node visible\n\t\t\t\t\t\tlastChild\n\t\t\t\t\t\t\t.scrollIntoView(true, { topNode: node })\n\t\t\t\t\t\t\t.always(function () {\n\t\t\t\t\t\t\t\tif (!noEvents) {\n\t\t\t\t\t\t\t\t\tctx.tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\tflag ? \"expand\" : \"collapse\",\n\t\t\t\t\t\t\t\t\t\tctx\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!noEvents) {\n\t\t\t\t\t\t\tctx.tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\tflag ? \"expand\" : \"collapse\",\n\t\t\t\t\t\t\t\tctx\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\t// vvv Code below is executed after loading finished:\n\t\t\t\t_afterLoad = function (callback) {\n\t\t\t\t\tvar cn = opts._classNames,\n\t\t\t\t\t\tisVisible,\n\t\t\t\t\t\tisExpanded,\n\t\t\t\t\t\teffect = opts.toggleEffect;\n\n\t\t\t\t\tnode.expanded = flag;\n\t\t\t\t\ttree._callHook(\n\t\t\t\t\t\t\"treeStructureChanged\",\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\tflag ? \"expand\" : \"collapse\"\n\t\t\t\t\t);\n\t\t\t\t\t// Create required markup, but make sure the top UL is hidden, so we\n\t\t\t\t\t// can animate later\n\t\t\t\t\ttree._callHook(\"nodeRender\", ctx, false, false, true);\n\n\t\t\t\t\t// Hide children, if node is collapsed\n\t\t\t\t\tif (node.ul) {\n\t\t\t\t\t\tisVisible = node.ul.style.display !== \"none\";\n\t\t\t\t\t\tisExpanded = !!node.expanded;\n\t\t\t\t\t\tif (isVisible === isExpanded) {\n\t\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\t\"nodeSetExpanded: UL.style.display already set\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (!effect || noAnimation) {\n\t\t\t\t\t\t\tnode.ul.style.display =\n\t\t\t\t\t\t\t\tnode.expanded || !parent ? \"\" : \"none\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// The UI toggle() effect works with the ext-wide extension,\n\t\t\t\t\t\t\t// while jQuery.animate() has problems when the title span\n\t\t\t\t\t\t\t// has position: absolute.\n\t\t\t\t\t\t\t// Since jQuery UI 1.12, the blind effect requires the parent\n\t\t\t\t\t\t\t// element to have 'position: relative'.\n\t\t\t\t\t\t\t// See #716, #717\n\t\t\t\t\t\t\t$(node.li).addClass(cn.animating); // #717\n\n\t\t\t\t\t\t\tif (_isFunction($(node.ul)[effect.effect])) {\n\t\t\t\t\t\t\t\t// tree.debug( \"use jquery.\" + effect.effect + \" method\" );\n\t\t\t\t\t\t\t\t$(node.ul)[effect.effect]({\n\t\t\t\t\t\t\t\t\tduration: effect.duration,\n\t\t\t\t\t\t\t\t\talways: function () {\n\t\t\t\t\t\t\t\t\t\t// node.debug(\"fancytree-animating end: \" + node.li.className);\n\t\t\t\t\t\t\t\t\t\t$(this).removeClass(cn.animating); // #716\n\t\t\t\t\t\t\t\t\t\t$(node.li).removeClass(cn.animating); // #717\n\t\t\t\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// The UI toggle() effect works with the ext-wide extension,\n\t\t\t\t\t\t\t\t// while jQuery.animate() has problems when the title span\n\t\t\t\t\t\t\t\t// has positon: absolute.\n\t\t\t\t\t\t\t\t// Since jQuery UI 1.12, the blind effect requires the parent\n\t\t\t\t\t\t\t\t// element to have 'position: relative'.\n\t\t\t\t\t\t\t\t// See #716, #717\n\t\t\t\t\t\t\t\t// tree.debug(\"use specified effect (\" + effect.effect + \") with the jqueryui.toggle method\");\n\n\t\t\t\t\t\t\t\t// try to stop an animation that might be already in progress\n\t\t\t\t\t\t\t\t$(node.ul).stop(true, true); //< does not work after resetLazy has been called for a node whose animation wasn't complete and effect was \"blind\"\n\n\t\t\t\t\t\t\t\t// dirty fix to remove a defunct animation (effect: \"blind\") after resetLazy has been called\n\t\t\t\t\t\t\t\t$(node.ul)\n\t\t\t\t\t\t\t\t\t.parent()\n\t\t\t\t\t\t\t\t\t.find(\".ui-effects-placeholder\")\n\t\t\t\t\t\t\t\t\t.remove();\n\n\t\t\t\t\t\t\t\t$(node.ul).toggle(\n\t\t\t\t\t\t\t\t\teffect.effect,\n\t\t\t\t\t\t\t\t\teffect.options,\n\t\t\t\t\t\t\t\t\teffect.duration,\n\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t// node.debug(\"fancytree-animating end: \" + node.li.className);\n\t\t\t\t\t\t\t\t\t\t$(this).removeClass(cn.animating); // #716\n\t\t\t\t\t\t\t\t\t\t$(node.li).removeClass(cn.animating); // #717\n\t\t\t\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback();\n\t\t\t\t};\n\t\t\t\t// ^^^ Code above is executed after loading finshed.\n\n\t\t\t\t// Load lazy nodes, if any. Then continue with _afterLoad()\n\t\t\t\tif (flag && node.lazy && node.hasChildren() === undefined) {\n\t\t\t\t\t// node.debug(\"nodeSetExpanded: load start...\");\n\t\t\t\t\tnode.load()\n\t\t\t\t\t\t.done(function () {\n\t\t\t\t\t\t\t// node.debug(\"nodeSetExpanded: load done\");\n\t\t\t\t\t\t\tif (dfd.notifyWith) {\n\t\t\t\t\t\t\t\t// requires jQuery 1.6+\n\t\t\t\t\t\t\t\tdfd.notifyWith(node, [\"loaded\"]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_afterLoad(function () {\n\t\t\t\t\t\t\t\tdfd.resolveWith(node);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.fail(function (errMsg) {\n\t\t\t\t\t\t\t_afterLoad(function () {\n\t\t\t\t\t\t\t\tdfd.rejectWith(node, [\n\t\t\t\t\t\t\t\t\t\"load failed (\" + errMsg + \")\",\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\tvar source = tree._triggerNodeEvent(\"lazyLoad\", node, ctx.originalEvent);\n\t\t\t\t\t_assert(typeof source !== \"boolean\", \"lazyLoad event must return source in data.result\");\n\t\t\t\t\tnode.debug(\"nodeSetExpanded: load start...\");\n\t\t\t\t\tthis._callHook(\"nodeLoadChildren\", ctx, source).done(function(){\n\t\t\t\t\t\tnode.debug(\"nodeSetExpanded: load done\");\n\t\t\t\t\t\tif(dfd.notifyWith){ // requires jQuery 1.6+\n\t\t\t\t\t\t\tdfd.notifyWith(node, [\"loaded\"]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_afterLoad.call(tree);\n\t\t\t\t\t}).fail(function(errMsg){\n\t\t\t\t\t\tdfd.rejectWith(node, [\"load failed (\" + errMsg + \")\"]);\n\t\t\t\t\t});\n\t\t\t\t\t*/\n\t\t\t\t} else {\n\t\t\t\t\t_afterLoad(function () {\n\t\t\t\t\t\tdfd.resolveWith(node);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// node.debug(\"nodeSetExpanded: returns\");\n\t\t\t\treturn dfd.promise();\n\t\t\t},\n\t\t\t/** Focus or blur this node.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [flag=true]\n\t\t\t */\n\t\t\tnodeSetFocus: function (ctx, flag) {\n\t\t\t\t// ctx.node.debug(\"nodeSetFocus(\" + flag + \")\");\n\t\t\t\tvar ctx2,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\topts = tree.options,\n\t\t\t\t\t// et = ctx.originalEvent && ctx.originalEvent.type,\n\t\t\t\t\tisInput = ctx.originalEvent\n\t\t\t\t\t\t? $(ctx.originalEvent.target).is(\":input\")\n\t\t\t\t\t\t: false;\n\n\t\t\t\tflag = flag !== false;\n\n\t\t\t\t// (node || tree).debug(\"nodeSetFocus(\" + flag + \"), event: \" + et + \", isInput: \"+ isInput);\n\t\t\t\t// Blur previous node if any\n\t\t\t\tif (tree.focusNode) {\n\t\t\t\t\tif (tree.focusNode === node && flag) {\n\t\t\t\t\t\t// node.debug(\"nodeSetFocus(\" + flag + \"): nothing to do\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tctx2 = $.extend({}, ctx, { node: tree.focusNode });\n\t\t\t\t\ttree.focusNode = null;\n\t\t\t\t\tthis._triggerNodeEvent(\"blur\", ctx2);\n\t\t\t\t\tthis._callHook(\"nodeRenderStatus\", ctx2);\n\t\t\t\t}\n\t\t\t\t// Set focus to container and node\n\t\t\t\tif (flag) {\n\t\t\t\t\tif (!this.hasFocus()) {\n\t\t\t\t\t\tnode.debug(\"nodeSetFocus: forcing container focus\");\n\t\t\t\t\t\tthis._callHook(\"treeSetFocus\", ctx, true, {\n\t\t\t\t\t\t\tcalledByNode: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tnode.makeVisible({ scrollIntoView: false });\n\t\t\t\t\ttree.focusNode = node;\n\t\t\t\t\tif (opts.titlesTabbable) {\n\t\t\t\t\t\tif (!isInput) {\n\t\t\t\t\t\t\t// #621\n\t\t\t\t\t\t\t$(node.span).find(\".fancytree-title\").focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (opts.aria) {\n\t\t\t\t\t\t// Set active descendant to node's span ID (create one, if needed)\n\t\t\t\t\t\t$(tree.$container).attr(\n\t\t\t\t\t\t\t\"aria-activedescendant\",\n\t\t\t\t\t\t\t$(node.tr || node.li)\n\t\t\t\t\t\t\t\t.uniqueId()\n\t\t\t\t\t\t\t\t.attr(\"id\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\t// \"ftal_\" + opts.idPrefix + node.key);\n\t\t\t\t\t}\n\t\t\t\t\t// $(node.span).find(\".fancytree-title\").focus();\n\t\t\t\t\tthis._triggerNodeEvent(\"focus\", ctx);\n\n\t\t\t\t\t// determine if we have focus on or inside tree container\n\t\t\t\t\tvar hasFancytreeFocus =\n\t\t\t\t\t\tdocument.activeElement === tree.$container.get(0) ||\n\t\t\t\t\t\t$(document.activeElement, tree.$container).length >= 1;\n\n\t\t\t\t\tif (!hasFancytreeFocus) {\n\t\t\t\t\t\t// We cannot set KB focus to a node, so use the tree container\n\t\t\t\t\t\t// #563, #570: IE scrolls on every call to .focus(), if the container\n\t\t\t\t\t\t// is partially outside the viewport. So do it only, when absolutely\n\t\t\t\t\t\t// necessary.\n\t\t\t\t\t\t$(tree.$container).focus();\n\t\t\t\t\t}\n\n\t\t\t\t\t// if( opts.autoActivate ){\n\t\t\t\t\t// \ttree.nodeSetActive(ctx, true);\n\t\t\t\t\t// }\n\t\t\t\t\tif (opts.autoScroll) {\n\t\t\t\t\t\tnode.scrollIntoView();\n\t\t\t\t\t}\n\t\t\t\t\tthis._callHook(\"nodeRenderStatus\", ctx);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** (De)Select node, return new status (sync).\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [flag=true]\n\t\t\t * @param {object} [opts] additional options. Defaults to {noEvents: false,\n\t\t\t *     propagateDown: null, propagateUp: null,\n\t\t\t *     callback: null,\n\t\t\t *     }\n\t\t\t * @returns {boolean} previous status\n\t\t\t */\n\t\t\tnodeSetSelected: function (ctx, flag, callOpts) {\n\t\t\t\tcallOpts = callOpts || {};\n\t\t\t\tvar node = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\tnoEvents = callOpts.noEvents === true,\n\t\t\t\t\tparent = node.parent;\n\n\t\t\t\t// flag defaults to true\n\t\t\t\tflag = flag !== false;\n\n\t\t\t\t// node.debug(\"nodeSetSelected(\" + flag + \")\", ctx);\n\n\t\t\t\t// Cannot (de)select unselectable nodes directly (only by propagation or\n\t\t\t\t// by setting the `.selected` property)\n\t\t\t\tif (FT.evalOption(\"unselectable\", node, node, opts, false)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Remember the user's intent, in case down -> up propagation prevents\n\t\t\t\t// applying it to node.selected\n\t\t\t\tnode._lastSelectIntent = flag; // Confusing use of '!'\n\n\t\t\t\t// Nothing to do?\n\t\t\t\tif (!!node.selected === flag) {\n\t\t\t\t\tif (opts.selectMode === 3 && node.partsel && !flag) {\n\t\t\t\t\t\t// If propagation prevented selecting this node last time, we still\n\t\t\t\t\t\t// want to allow to apply setSelected(false) now\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn flag;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t!noEvents &&\n\t\t\t\t\tthis._triggerNodeEvent(\n\t\t\t\t\t\t\"beforeSelect\",\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tctx.originalEvent\n\t\t\t\t\t) === false\n\t\t\t\t) {\n\t\t\t\t\treturn !!node.selected;\n\t\t\t\t}\n\t\t\t\tif (flag && opts.selectMode === 1) {\n\t\t\t\t\t// single selection mode (we don't uncheck all tree nodes, for performance reasons)\n\t\t\t\t\tif (tree.lastSelectedNode) {\n\t\t\t\t\t\ttree.lastSelectedNode.setSelected(false);\n\t\t\t\t\t}\n\t\t\t\t\tnode.selected = flag;\n\t\t\t\t} else if (\n\t\t\t\t\topts.selectMode === 3 &&\n\t\t\t\t\tparent &&\n\t\t\t\t\t!parent.radiogroup &&\n\t\t\t\t\t!node.radiogroup\n\t\t\t\t) {\n\t\t\t\t\t// multi-hierarchical selection mode\n\t\t\t\t\tnode.selected = flag;\n\t\t\t\t\tnode.fixSelection3AfterClick(callOpts);\n\t\t\t\t} else if (parent && parent.radiogroup) {\n\t\t\t\t\tnode.visitSiblings(function (n) {\n\t\t\t\t\t\tn._changeSelectStatusAttrs(flag && n === node);\n\t\t\t\t\t}, true);\n\t\t\t\t} else {\n\t\t\t\t\t// default: selectMode: 2, multi selection mode\n\t\t\t\t\tnode.selected = flag;\n\t\t\t\t}\n\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t\ttree.lastSelectedNode = flag ? node : null;\n\t\t\t\tif (!noEvents) {\n\t\t\t\t\ttree._triggerNodeEvent(\"select\", ctx);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Show node status (ok, loading, error, nodata) using styles and a dummy child node.\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param status\n\t\t\t * @param message\n\t\t\t * @param details\n\t\t\t * @since 2.3\n\t\t\t */\n\t\t\tnodeSetStatus: function (ctx, status, message, details) {\n\t\t\t\tvar node = ctx.node,\n\t\t\t\t\ttree = ctx.tree;\n\n\t\t\t\tfunction _clearStatusNode() {\n\t\t\t\t\t// Remove dedicated dummy node, if any\n\t\t\t\t\tvar firstChild = node.children ? node.children[0] : null;\n\t\t\t\t\tif (firstChild && firstChild.isStatusNode()) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// I've seen exceptions here with loadKeyPath...\n\t\t\t\t\t\t\tif (node.ul) {\n\t\t\t\t\t\t\t\tnode.ul.removeChild(firstChild.li);\n\t\t\t\t\t\t\t\tfirstChild.li = null; // avoid leaks (DT issue 215)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\tif (node.children.length === 1) {\n\t\t\t\t\t\t\tnode.children = [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.children.shift();\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttree._callHook(\n\t\t\t\t\t\t\t\"treeStructureChanged\",\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\"clearStatusNode\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfunction _setStatusNode(data, type) {\n\t\t\t\t\t// Create/modify the dedicated dummy node for 'loading...' or\n\t\t\t\t\t// 'error!' status. (only called for direct child of the invisible\n\t\t\t\t\t// system root)\n\t\t\t\t\tvar firstChild = node.children ? node.children[0] : null;\n\t\t\t\t\tif (firstChild && firstChild.isStatusNode()) {\n\t\t\t\t\t\t$.extend(firstChild, data);\n\t\t\t\t\t\tfirstChild.statusNodeType = type;\n\t\t\t\t\t\ttree._callHook(\"nodeRenderTitle\", firstChild);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode._setChildren([data]);\n\t\t\t\t\t\ttree._callHook(\n\t\t\t\t\t\t\t\"treeStructureChanged\",\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\"setStatusNode\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnode.children[0].statusNodeType = type;\n\t\t\t\t\t\ttree.render();\n\t\t\t\t\t}\n\t\t\t\t\treturn node.children[0];\n\t\t\t\t}\n\n\t\t\t\tswitch (status) {\n\t\t\t\t\tcase \"ok\":\n\t\t\t\t\t\t_clearStatusNode();\n\t\t\t\t\t\tnode._isLoading = false;\n\t\t\t\t\t\tnode._error = null;\n\t\t\t\t\t\tnode.renderStatus();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"loading\":\n\t\t\t\t\t\tif (!node.parent) {\n\t\t\t\t\t\t\t_setStatusNode(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t\t\ttree.options.strings.loading +\n\t\t\t\t\t\t\t\t\t\t(message ? \" (\" + message + \")\" : \"\"),\n\t\t\t\t\t\t\t\t\t// icon: true,  // needed for 'loding' icon\n\t\t\t\t\t\t\t\t\tcheckbox: false,\n\t\t\t\t\t\t\t\t\ttooltip: details,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode._isLoading = true;\n\t\t\t\t\t\tnode._error = null;\n\t\t\t\t\t\tnode.renderStatus();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"error\":\n\t\t\t\t\t\t_setStatusNode(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t\ttree.options.strings.loadError +\n\t\t\t\t\t\t\t\t\t(message ? \" (\" + message + \")\" : \"\"),\n\t\t\t\t\t\t\t\t// icon: false,\n\t\t\t\t\t\t\t\tcheckbox: false,\n\t\t\t\t\t\t\t\ttooltip: details,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnode._isLoading = false;\n\t\t\t\t\t\tnode._error = { message: message, details: details };\n\t\t\t\t\t\tnode.renderStatus();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"nodata\":\n\t\t\t\t\t\t_setStatusNode(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: message || tree.options.strings.noData,\n\t\t\t\t\t\t\t\t// icon: false,\n\t\t\t\t\t\t\t\tcheckbox: false,\n\t\t\t\t\t\t\t\ttooltip: details,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnode._isLoading = false;\n\t\t\t\t\t\tnode._error = null;\n\t\t\t\t\t\tnode.renderStatus();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t$.error(\"invalid node status \" + status);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/**\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeToggleExpanded: function (ctx) {\n\t\t\t\treturn this.nodeSetExpanded(ctx, !ctx.node.expanded);\n\t\t\t},\n\t\t\t/**\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeToggleSelected: function (ctx) {\n\t\t\t\tvar node = ctx.node,\n\t\t\t\t\tflag = !node.selected;\n\n\t\t\t\t// In selectMode: 3 this node may be unselected+partsel, even if\n\t\t\t\t// setSelected(true) was called before, due to `unselectable` children.\n\t\t\t\t// In this case, we now toggle as `setSelected(false)`\n\t\t\t\tif (\n\t\t\t\t\tnode.partsel &&\n\t\t\t\t\t!node.selected &&\n\t\t\t\t\tnode._lastSelectIntent === true\n\t\t\t\t) {\n\t\t\t\t\tflag = false;\n\t\t\t\t\tnode.selected = true; // so it is not considered 'nothing to do'\n\t\t\t\t}\n\t\t\t\tnode._lastSelectIntent = flag;\n\t\t\t\treturn this.nodeSetSelected(ctx, flag);\n\t\t\t},\n\t\t\t/** Remove all nodes.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\ttreeClear: function (ctx) {\n\t\t\t\tvar tree = ctx.tree;\n\t\t\t\ttree.activeNode = null;\n\t\t\t\ttree.focusNode = null;\n\t\t\t\ttree.$div.find(\">ul.fancytree-container\").empty();\n\t\t\t\t// TODO: call destructors and remove reference loops\n\t\t\t\ttree.rootNode.children = null;\n\t\t\t\ttree._callHook(\"treeStructureChanged\", ctx, \"clear\");\n\t\t\t},\n\t\t\t/** Widget was created (called only once, even it re-initialized).\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\ttreeCreate: function (ctx) {},\n\t\t\t/** Widget was destroyed.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\ttreeDestroy: function (ctx) {\n\t\t\t\tthis.$div.find(\">ul.fancytree-container\").remove();\n\t\t\t\tif (this.$source) {\n\t\t\t\t\tthis.$source.removeClass(\"fancytree-helper-hidden\");\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Widget was (re-)initialized.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\ttreeInit: function (ctx) {\n\t\t\t\tvar tree = ctx.tree,\n\t\t\t\t\topts = tree.options;\n\n\t\t\t\t//this.debug(\"Fancytree.treeInit()\");\n\t\t\t\t// Add container to the TAB chain\n\t\t\t\t// See http://www.w3.org/TR/wai-aria-practices/#focus_activedescendant\n\t\t\t\t// #577: Allow to set tabindex to \"0\", \"-1\" and \"\"\n\t\t\t\ttree.$container.attr(\"tabindex\", opts.tabindex);\n\n\t\t\t\t// Copy some attributes to tree.data\n\t\t\t\t$.each(TREE_ATTRS, function (i, attr) {\n\t\t\t\t\tif (opts[attr] !== undefined) {\n\t\t\t\t\t\ttree.info(\"Move option \" + attr + \" to tree\");\n\t\t\t\t\t\ttree[attr] = opts[attr];\n\t\t\t\t\t\tdelete opts[attr];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (opts.checkboxAutoHide) {\n\t\t\t\t\ttree.$container.addClass(\"fancytree-checkbox-auto-hide\");\n\t\t\t\t}\n\t\t\t\tif (opts.rtl) {\n\t\t\t\t\ttree.$container\n\t\t\t\t\t\t.attr(\"DIR\", \"RTL\")\n\t\t\t\t\t\t.addClass(\"fancytree-rtl\");\n\t\t\t\t} else {\n\t\t\t\t\ttree.$container\n\t\t\t\t\t\t.removeAttr(\"DIR\")\n\t\t\t\t\t\t.removeClass(\"fancytree-rtl\");\n\t\t\t\t}\n\t\t\t\tif (opts.aria) {\n\t\t\t\t\ttree.$container.attr(\"role\", \"tree\");\n\t\t\t\t\tif (opts.selectMode !== 1) {\n\t\t\t\t\t\ttree.$container.attr(\"aria-multiselectable\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.treeLoad(ctx);\n\t\t\t},\n\t\t\t/** Parse Fancytree from source, as configured in the options.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {object} [source] optional new source (use last data otherwise)\n\t\t\t */\n\t\t\ttreeLoad: function (ctx, source) {\n\t\t\t\tvar metaData,\n\t\t\t\t\ttype,\n\t\t\t\t\t$ul,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\t$container = ctx.widget.element,\n\t\t\t\t\tdfd,\n\t\t\t\t\t// calling context for root node\n\t\t\t\t\trootCtx = $.extend({}, ctx, { node: this.rootNode });\n\n\t\t\t\tif (tree.rootNode.children) {\n\t\t\t\t\tthis.treeClear(ctx);\n\t\t\t\t}\n\t\t\t\tsource = source || this.options.source;\n\n\t\t\t\tif (!source) {\n\t\t\t\t\ttype = $container.data(\"type\") || \"html\";\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase \"html\":\n\t\t\t\t\t\t\t// There should be an embedded `<ul>` with initial nodes,\n\t\t\t\t\t\t\t// but another `<ul class='fancytree-container'>` is appended\n\t\t\t\t\t\t\t// to the tree's <div> on startup anyway.\n\t\t\t\t\t\t\t$ul = $container\n\t\t\t\t\t\t\t\t.find(\">ul\")\n\t\t\t\t\t\t\t\t.not(\".fancytree-container\")\n\t\t\t\t\t\t\t\t.first();\n\n\t\t\t\t\t\t\tif ($ul.length) {\n\t\t\t\t\t\t\t\t$ul.addClass(\n\t\t\t\t\t\t\t\t\t\"ui-fancytree-source fancytree-helper-hidden\"\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tsource = $.ui.fancytree.parseHtml($ul);\n\t\t\t\t\t\t\t\t// allow to init tree.data.foo from <ul data-foo=''>\n\t\t\t\t\t\t\t\tthis.data = $.extend(\n\t\t\t\t\t\t\t\t\tthis.data,\n\t\t\t\t\t\t\t\t\t_getElementDataAsDict($ul)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tFT.warn(\n\t\t\t\t\t\t\t\t\t\"No `source` option was passed and container does not contain `<ul>`: assuming `source: []`.\"\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tsource = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"json\":\n\t\t\t\t\t\t\tsource = $.parseJSON($container.text());\n\t\t\t\t\t\t\t// $container already contains the <ul>, but we remove the plain (json) text\n\t\t\t\t\t\t\t// $container.empty();\n\t\t\t\t\t\t\t$container\n\t\t\t\t\t\t\t\t.contents()\n\t\t\t\t\t\t\t\t.filter(function () {\n\t\t\t\t\t\t\t\t\treturn this.nodeType === 3;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.remove();\n\t\t\t\t\t\t\tif ($.isPlainObject(source)) {\n\t\t\t\t\t\t\t\t// We got {foo: 'abc', children: [...]}\n\t\t\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\t\t\t_isArray(source.children),\n\t\t\t\t\t\t\t\t\t\"if an object is passed as source, it must contain a 'children' array (all other properties are added to 'tree.data')\"\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tmetaData = source;\n\t\t\t\t\t\t\t\tsource = source.children;\n\t\t\t\t\t\t\t\tdelete metaData.children;\n\t\t\t\t\t\t\t\t// Copy some attributes to tree.data\n\t\t\t\t\t\t\t\t$.each(TREE_ATTRS, function (i, attr) {\n\t\t\t\t\t\t\t\t\tif (metaData[attr] !== undefined) {\n\t\t\t\t\t\t\t\t\t\ttree[attr] = metaData[attr];\n\t\t\t\t\t\t\t\t\t\tdelete metaData[attr];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t// Copy extra properties to tree.data.foo\n\t\t\t\t\t\t\t\t$.extend(tree.data, metaData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t$.error(\"Invalid data-type: \" + type);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof source === \"string\") {\n\t\t\t\t\t// TODO: source is an element ID\n\t\t\t\t\t$.error(\"Not implemented\");\n\t\t\t\t}\n\n\t\t\t\t// preInit is fired when the widget markup is created, but nodes\n\t\t\t\t// not yet loaded\n\t\t\t\ttree._triggerTreeEvent(\"preInit\", null);\n\n\t\t\t\t// Trigger fancytreeinit after nodes have been loaded\n\t\t\t\tdfd = this.nodeLoadChildren(rootCtx, source)\n\t\t\t\t\t.done(function () {\n\t\t\t\t\t\ttree._callHook(\n\t\t\t\t\t\t\t\"treeStructureChanged\",\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\"loadChildren\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttree.render();\n\t\t\t\t\t\tif (ctx.options.selectMode === 3) {\n\t\t\t\t\t\t\ttree.rootNode.fixSelection3FromEndNodes();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tree.activeNode && tree.options.activeVisible) {\n\t\t\t\t\t\t\ttree.activeNode.makeVisible();\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttree._triggerTreeEvent(\"init\", null, { status: true });\n\t\t\t\t\t})\n\t\t\t\t\t.fail(function () {\n\t\t\t\t\t\ttree.render();\n\t\t\t\t\t\ttree._triggerTreeEvent(\"init\", null, { status: false });\n\t\t\t\t\t});\n\t\t\t\treturn dfd;\n\t\t\t},\n\t\t\t/** Node was inserted into or removed from the tree.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} add\n\t\t\t * @param {FancytreeNode} node\n\t\t\t */\n\t\t\ttreeRegisterNode: function (ctx, add, node) {\n\t\t\t\tctx.tree._callHook(\n\t\t\t\t\t\"treeStructureChanged\",\n\t\t\t\t\tctx,\n\t\t\t\t\tadd ? \"addNode\" : \"removeNode\"\n\t\t\t\t);\n\t\t\t},\n\t\t\t/** Widget got focus.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [flag=true]\n\t\t\t */\n\t\t\ttreeSetFocus: function (ctx, flag, callOpts) {\n\t\t\t\tvar targetNode;\n\n\t\t\t\tflag = flag !== false;\n\n\t\t\t\t// this.debug(\"treeSetFocus(\" + flag + \"), callOpts: \", callOpts, this.hasFocus());\n\t\t\t\t// this.debug(\"    focusNode: \" + this.focusNode);\n\t\t\t\t// this.debug(\"    activeNode: \" + this.activeNode);\n\t\t\t\tif (flag !== this.hasFocus()) {\n\t\t\t\t\tthis._hasFocus = flag;\n\t\t\t\t\tif (!flag && this.focusNode) {\n\t\t\t\t\t\t// Node also looses focus if widget blurs\n\t\t\t\t\t\tthis.focusNode.setFocus(false);\n\t\t\t\t\t} else if (flag && (!callOpts || !callOpts.calledByNode)) {\n\t\t\t\t\t\t$(this.$container).focus();\n\t\t\t\t\t}\n\t\t\t\t\tthis.$container.toggleClass(\"fancytree-treefocus\", flag);\n\t\t\t\t\tthis._triggerTreeEvent(flag ? \"focusTree\" : \"blurTree\");\n\t\t\t\t\tif (flag && !this.activeNode) {\n\t\t\t\t\t\t// #712: Use last mousedowned node ('click' event fires after focusin)\n\t\t\t\t\t\ttargetNode =\n\t\t\t\t\t\t\tthis._lastMousedownNode || this.getFirstChild();\n\t\t\t\t\t\tif (targetNode) {\n\t\t\t\t\t\t\ttargetNode.setFocus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Widget option was set using `$().fancytree(\"option\", \"KEY\", VALUE)`.\n\t\t\t *\n\t\t\t * Note: `key` may reference a nested option, e.g. 'dnd5.scroll'.\n\t\t\t * In this case `value`contains the complete, modified `dnd5` option hash.\n\t\t\t * We can check for changed values like\n\t\t\t *     if( value.scroll !== tree.options.dnd5.scroll ) {...}\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {string} key option name\n\t\t\t * @param {any} value option value\n\t\t\t */\n\t\t\ttreeSetOption: function (ctx, key, value) {\n\t\t\t\tvar tree = ctx.tree,\n\t\t\t\t\tcallDefault = true,\n\t\t\t\t\tcallCreate = false,\n\t\t\t\t\tcallRender = false;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase \"aria\":\n\t\t\t\t\tcase \"checkbox\":\n\t\t\t\t\tcase \"icon\":\n\t\t\t\t\tcase \"minExpandLevel\":\n\t\t\t\t\tcase \"tabindex\":\n\t\t\t\t\t\t// tree._callHook(\"treeCreate\", tree);\n\t\t\t\t\t\tcallCreate = true;\n\t\t\t\t\t\tcallRender = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"checkboxAutoHide\":\n\t\t\t\t\t\ttree.$container.toggleClass(\n\t\t\t\t\t\t\t\"fancytree-checkbox-auto-hide\",\n\t\t\t\t\t\t\t!!value\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"escapeTitles\":\n\t\t\t\t\tcase \"tooltip\":\n\t\t\t\t\t\tcallRender = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"rtl\":\n\t\t\t\t\t\tif (value === false) {\n\t\t\t\t\t\t\ttree.$container\n\t\t\t\t\t\t\t\t.removeAttr(\"DIR\")\n\t\t\t\t\t\t\t\t.removeClass(\"fancytree-rtl\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttree.$container\n\t\t\t\t\t\t\t\t.attr(\"DIR\", \"RTL\")\n\t\t\t\t\t\t\t\t.addClass(\"fancytree-rtl\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallRender = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"source\":\n\t\t\t\t\t\tcallDefault = false;\n\t\t\t\t\t\ttree._callHook(\"treeLoad\", tree, value);\n\t\t\t\t\t\tcallRender = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\ttree.debug(\n\t\t\t\t\t\"set option \" +\n\t\t\t\t\t\tkey +\n\t\t\t\t\t\t\"=\" +\n\t\t\t\t\t\tvalue +\n\t\t\t\t\t\t\" <\" +\n\t\t\t\t\t\ttypeof value +\n\t\t\t\t\t\t\">\"\n\t\t\t\t);\n\t\t\t\tif (callDefault) {\n\t\t\t\t\tif (this.widget._super) {\n\t\t\t\t\t\t// jQuery UI 1.9+\n\t\t\t\t\t\tthis.widget._super.call(this.widget, key, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// jQuery UI <= 1.8, we have to manually invoke the _setOption method from the base widget\n\t\t\t\t\t\t$.Widget.prototype._setOption.call(\n\t\t\t\t\t\t\tthis.widget,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (callCreate) {\n\t\t\t\t\ttree._callHook(\"treeCreate\", tree);\n\t\t\t\t}\n\t\t\t\tif (callRender) {\n\t\t\t\t\ttree.render(true, false); // force, not-deep\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** A Node was added, removed, moved, or it's visibility changed.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\ttreeStructureChanged: function (ctx, type) {},\n\t\t}\n\t);\n\n\t/*******************************************************************************\n\t * jQuery UI widget boilerplate\n\t */\n\n\t/**\n\t * The plugin (derrived from [jQuery.Widget](http://api.jqueryui.com/jQuery.widget/)).\n\t *\n\t * **Note:**\n\t * These methods implement the standard jQuery UI widget API.\n\t * It is recommended to use methods of the {Fancytree} instance instead\n\t *\n\t * @example\n\t * // DEPRECATED: Access jQuery UI widget methods and members:\n\t * var tree = $(\"#tree\").fancytree(\"getTree\");\n\t * var node = $(\"#tree\").fancytree(\"getActiveNode\");\n\t *\n\t * // RECOMMENDED: Use the Fancytree object API\n\t * var tree = $.ui.fancytree.getTree(\"#tree\");\n\t * var node = tree.getActiveNode();\n\t *\n\t * // or you may already have stored the tree instance upon creation:\n\t * import {createTree, version} from 'jquery.fancytree'\n\t * const tree = createTree('#tree', { ... });\n\t * var node = tree.getActiveNode();\n\t *\n\t * @see {Fancytree_Static#getTree}\n\t * @deprecated Use methods of the {Fancytree} instance instead\n\t * @mixin Fancytree_Widget\n\t */\n\n\t$.widget(\n\t\t\"ui.fancytree\",\n\t\t/** @lends Fancytree_Widget# */\n\t\t{\n\t\t\t/**These options will be used as defaults\n\t\t\t * @type {FancytreeOptions}\n\t\t\t */\n\t\t\toptions: {\n\t\t\t\tactiveVisible: true,\n\t\t\t\tajax: {\n\t\t\t\t\ttype: \"GET\",\n\t\t\t\t\tcache: false, // false: Append random '_' argument to the request url to prevent caching.\n\t\t\t\t\t// timeout: 0, // >0: Make sure we get an ajax error if server is unreachable\n\t\t\t\t\tdataType: \"json\", // Expect json format and pass json object to callbacks.\n\t\t\t\t},\n\t\t\t\taria: true,\n\t\t\t\tautoActivate: true,\n\t\t\t\tautoCollapse: false,\n\t\t\t\tautoScroll: false,\n\t\t\t\tcheckbox: false,\n\t\t\t\tclickFolderMode: 4,\n\t\t\t\tcopyFunctionsToData: false,\n\t\t\t\tdebugLevel: null, // 0..4 (null: use global setting $.ui.fancytree.debugLevel)\n\t\t\t\tdisabled: false, // TODO: required anymore?\n\t\t\t\tenableAspx: 42, // TODO: this is truethy, but distinguishable from true: default will change to false in the future\n\t\t\t\tescapeTitles: false,\n\t\t\t\textensions: [],\n\t\t\t\tfocusOnSelect: false,\n\t\t\t\tgenerateIds: false,\n\t\t\t\ticon: true,\n\t\t\t\tidPrefix: \"ft_\",\n\t\t\t\tkeyboard: true,\n\t\t\t\tkeyPathSeparator: \"/\",\n\t\t\t\tminExpandLevel: 1,\n\t\t\t\tnodata: true, // (bool, string, or callback) display message, when no data available\n\t\t\t\tquicksearch: false,\n\t\t\t\trtl: false,\n\t\t\t\tscrollOfs: { top: 0, bottom: 0 },\n\t\t\t\tscrollParent: null,\n\t\t\t\tselectMode: 2,\n\t\t\t\tstrings: {\n\t\t\t\t\tloading: \"Loading...\", // &#8230; would be escaped when escapeTitles is true\n\t\t\t\t\tloadError: \"Load error!\",\n\t\t\t\t\tmoreData: \"More...\",\n\t\t\t\t\tnoData: \"No data.\",\n\t\t\t\t},\n\t\t\t\ttabindex: \"0\",\n\t\t\t\ttitlesTabbable: false,\n\t\t\t\ttoggleEffect: { effect: \"slideToggle\", duration: 200 }, //< \"toggle\" or \"slideToggle\" to use jQuery instead of jQueryUI for toggleEffect animation\n\t\t\t\ttooltip: false,\n\t\t\t\ttreeId: null,\n\t\t\t\t_classNames: {\n\t\t\t\t\tactive: \"fancytree-active\",\n\t\t\t\t\tanimating: \"fancytree-animating\",\n\t\t\t\t\tcombinedExpanderPrefix: \"fancytree-exp-\",\n\t\t\t\t\tcombinedIconPrefix: \"fancytree-ico-\",\n\t\t\t\t\terror: \"fancytree-error\",\n\t\t\t\t\texpanded: \"fancytree-expanded\",\n\t\t\t\t\tfocused: \"fancytree-focused\",\n\t\t\t\t\tfolder: \"fancytree-folder\",\n\t\t\t\t\thasChildren: \"fancytree-has-children\",\n\t\t\t\t\tlastsib: \"fancytree-lastsib\",\n\t\t\t\t\tlazy: \"fancytree-lazy\",\n\t\t\t\t\tloading: \"fancytree-loading\",\n\t\t\t\t\tnode: \"fancytree-node\",\n\t\t\t\t\tpartload: \"fancytree-partload\",\n\t\t\t\t\tpartsel: \"fancytree-partsel\",\n\t\t\t\t\tradio: \"fancytree-radio\",\n\t\t\t\t\tselected: \"fancytree-selected\",\n\t\t\t\t\tstatusNodePrefix: \"fancytree-statusnode-\",\n\t\t\t\t\tunselectable: \"fancytree-unselectable\",\n\t\t\t\t},\n\t\t\t\t// events\n\t\t\t\tlazyLoad: null,\n\t\t\t\tpostProcess: null,\n\t\t\t},\n\t\t\t_deprecationWarning: function (name) {\n\t\t\t\tvar tree = this.tree;\n\n\t\t\t\tif (tree && tree.options.debugLevel >= 3) {\n\t\t\t\t\ttree.warn(\n\t\t\t\t\t\t\"$().fancytree('\" +\n\t\t\t\t\t\t\tname +\n\t\t\t\t\t\t\t\"') is deprecated (see https://wwwendt.de/tech/fancytree/doc/jsdoc/Fancytree_Widget.html\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/* Set up the widget, Called on first $().fancytree() */\n\t\t\t_create: function () {\n\t\t\t\tthis.tree = new Fancytree(this);\n\n\t\t\t\tthis.$source =\n\t\t\t\t\tthis.source || this.element.data(\"type\") === \"json\"\n\t\t\t\t\t\t? this.element\n\t\t\t\t\t\t: this.element.find(\">ul\").first();\n\t\t\t\t// Subclass Fancytree instance with all enabled extensions\n\t\t\t\tvar extension,\n\t\t\t\t\textName,\n\t\t\t\t\ti,\n\t\t\t\t\topts = this.options,\n\t\t\t\t\textensions = opts.extensions,\n\t\t\t\t\tbase = this.tree;\n\n\t\t\t\tfor (i = 0; i < extensions.length; i++) {\n\t\t\t\t\textName = extensions[i];\n\t\t\t\t\textension = $.ui.fancytree._extensions[extName];\n\t\t\t\t\tif (!extension) {\n\t\t\t\t\t\t$.error(\n\t\t\t\t\t\t\t\"Could not apply extension '\" +\n\t\t\t\t\t\t\t\textName +\n\t\t\t\t\t\t\t\t\"' (it is not registered, did you forget to include it?)\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Add extension options as tree.options.EXTENSION\n\t\t\t\t\t// \t_assert(!this.tree.options[extName], \"Extension name must not exist as option name: \" + extName);\n\n\t\t\t\t\t// console.info(\"extend \" + extName, extension.options, this.tree.options[extName])\n\t\t\t\t\t// issue #876: we want to replace custom array-options, not merge them\n\t\t\t\t\tthis.tree.options[extName] = _simpleDeepMerge(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\textension.options,\n\t\t\t\t\t\tthis.tree.options[extName]\n\t\t\t\t\t);\n\t\t\t\t\t// this.tree.options[extName] = $.extend(true, {}, extension.options, this.tree.options[extName]);\n\n\t\t\t\t\t// console.info(\"extend \" + extName + \" =>\", this.tree.options[extName])\n\t\t\t\t\t// console.info(\"extend \" + extName + \" org default =>\", extension.options)\n\n\t\t\t\t\t// Add a namespace tree.ext.EXTENSION, to hold instance data\n\t\t\t\t\t_assert(\n\t\t\t\t\t\tthis.tree.ext[extName] === undefined,\n\t\t\t\t\t\t\"Extension name must not exist as Fancytree.ext attribute: '\" +\n\t\t\t\t\t\t\textName +\n\t\t\t\t\t\t\t\"'\"\n\t\t\t\t\t);\n\t\t\t\t\t// this.tree[extName] = extension;\n\t\t\t\t\tthis.tree.ext[extName] = {};\n\t\t\t\t\t// Subclass Fancytree methods using proxies.\n\t\t\t\t\t_subclassObject(this.tree, base, extension, extName);\n\t\t\t\t\t// current extension becomes base for the next extension\n\t\t\t\t\tbase = extension;\n\t\t\t\t}\n\t\t\t\t//\n\t\t\t\tif (opts.icons !== undefined) {\n\t\t\t\t\t// 2015-11-16\n\t\t\t\t\tif (opts.icon === true) {\n\t\t\t\t\t\tthis.tree.warn(\n\t\t\t\t\t\t\t\"'icons' tree option is deprecated since v2.14.0: use 'icon' instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\topts.icon = opts.icons;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$.error(\n\t\t\t\t\t\t\t\"'icons' tree option is deprecated since v2.14.0: use 'icon' only instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (opts.iconClass !== undefined) {\n\t\t\t\t\t// 2015-11-16\n\t\t\t\t\tif (opts.icon) {\n\t\t\t\t\t\t$.error(\n\t\t\t\t\t\t\t\"'iconClass' tree option is deprecated since v2.14.0: use 'icon' only instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.tree.warn(\n\t\t\t\t\t\t\t\"'iconClass' tree option is deprecated since v2.14.0: use 'icon' instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\topts.icon = opts.iconClass;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (opts.tabbable !== undefined) {\n\t\t\t\t\t// 2016-04-04\n\t\t\t\t\topts.tabindex = opts.tabbable ? \"0\" : \"-1\";\n\t\t\t\t\tthis.tree.warn(\n\t\t\t\t\t\t\"'tabbable' tree option is deprecated since v2.17.0: use 'tabindex='\" +\n\t\t\t\t\t\t\topts.tabindex +\n\t\t\t\t\t\t\t\"' instead\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t//\n\t\t\t\tthis.tree._callHook(\"treeCreate\", this.tree);\n\t\t\t\t// Note: 'fancytreecreate' event is fired by widget base class\n\t\t\t\t//        this.tree._triggerTreeEvent(\"create\");\n\t\t\t},\n\n\t\t\t/* Called on every $().fancytree() */\n\t\t\t_init: function () {\n\t\t\t\tthis.tree._callHook(\"treeInit\", this.tree);\n\t\t\t\t// TODO: currently we call bind after treeInit, because treeInit\n\t\t\t\t// might change tree.$container.\n\t\t\t\t// It would be better, to move event binding into hooks altogether\n\t\t\t\tthis._bind();\n\t\t\t},\n\n\t\t\t/* Use the _setOption method to respond to changes to options. */\n\t\t\t_setOption: function (key, value) {\n\t\t\t\treturn this.tree._callHook(\n\t\t\t\t\t\"treeSetOption\",\n\t\t\t\t\tthis.tree,\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue\n\t\t\t\t);\n\t\t\t},\n\n\t\t\t/** Use the destroy method to clean up any modifications your widget has made to the DOM */\n\t\t\t_destroy: function () {\n\t\t\t\tthis._unbind();\n\t\t\t\tthis.tree._callHook(\"treeDestroy\", this.tree);\n\t\t\t\t// In jQuery UI 1.8, you must invoke the destroy method from the base widget\n\t\t\t\t// $.Widget.prototype.destroy.call(this);\n\t\t\t\t// TODO: delete tree and nodes to make garbage collect easier?\n\t\t\t\t// TODO: In jQuery UI 1.9 and above, you would define _destroy instead of destroy and not call the base method\n\t\t\t},\n\n\t\t\t// -------------------------------------------------------------------------\n\n\t\t\t/* Remove all event handlers for our namespace */\n\t\t\t_unbind: function () {\n\t\t\t\tvar ns = this.tree._ns;\n\t\t\t\tthis.element.off(ns);\n\t\t\t\tthis.tree.$container.off(ns);\n\t\t\t\t$(document).off(ns);\n\t\t\t},\n\t\t\t/* Add mouse and kyboard handlers to the container */\n\t\t\t_bind: function () {\n\t\t\t\tvar self = this,\n\t\t\t\t\topts = this.options,\n\t\t\t\t\ttree = this.tree,\n\t\t\t\t\tns = tree._ns;\n\t\t\t\t// selstartEvent = ( $.support.selectstart ? \"selectstart\" : \"mousedown\" )\n\n\t\t\t\t// Remove all previuous handlers for this tree\n\t\t\t\tthis._unbind();\n\n\t\t\t\t//alert(\"keydown\" + ns + \"foc=\" + tree.hasFocus() + tree.$container);\n\t\t\t\t// tree.debug(\"bind events; container: \", tree.$container);\n\t\t\t\ttree.$container\n\t\t\t\t\t.on(\"focusin\" + ns + \" focusout\" + ns, function (event) {\n\t\t\t\t\t\tvar node = FT.getNode(event),\n\t\t\t\t\t\t\tflag = event.type === \"focusin\";\n\n\t\t\t\t\t\tif (!flag && node && $(event.target).is(\"a\")) {\n\t\t\t\t\t\t\t// #764\n\t\t\t\t\t\t\tnode.debug(\n\t\t\t\t\t\t\t\t\"Ignored focusout on embedded <a> element.\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// tree.treeOnFocusInOut.call(tree, event);\n\t\t\t\t\t\t// tree.debug(\"Tree container got event \" + event.type, node, event, FT.getEventTarget(event));\n\t\t\t\t\t\tif (flag) {\n\t\t\t\t\t\t\tif (tree._getExpiringValue(\"focusin\")) {\n\t\t\t\t\t\t\t\t// #789: IE 11 may send duplicate focusin events\n\t\t\t\t\t\t\t\ttree.debug(\"Ignored double focusin.\");\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttree._setExpiringValue(\"focusin\", true, 50);\n\n\t\t\t\t\t\t\tif (!node) {\n\t\t\t\t\t\t\t\t// #789: IE 11 may send focusin before mousdown(?)\n\t\t\t\t\t\t\t\tnode = tree._getExpiringValue(\"mouseDownNode\");\n\t\t\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\t\t\ttree.debug(\n\t\t\t\t\t\t\t\t\t\t\"Reconstruct mouse target for focusin from recent event.\"\n\t\t\t\t\t\t\t\t\t);\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\tif (node) {\n\t\t\t\t\t\t\t// For example clicking into an <input> that is part of a node\n\t\t\t\t\t\t\ttree._callHook(\n\t\t\t\t\t\t\t\t\"nodeSetFocus\",\n\t\t\t\t\t\t\t\ttree._makeHookContext(node, event),\n\t\t\t\t\t\t\t\tflag\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttree.tbody &&\n\t\t\t\t\t\t\t\t$(event.target).parents(\n\t\t\t\t\t\t\t\t\t\"table.fancytree-container > thead\"\n\t\t\t\t\t\t\t\t).length\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// #767: ignore events in the table's header\n\t\t\t\t\t\t\t\ttree.debug(\n\t\t\t\t\t\t\t\t\t\"Ignore focus event outside table body.\",\n\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttree._callHook(\"treeSetFocus\", tree, flag);\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.on(\n\t\t\t\t\t\t\"selectstart\" + ns,\n\t\t\t\t\t\t\"span.fancytree-title\",\n\t\t\t\t\t\tfunction (event) {\n\t\t\t\t\t\t\t// prevent mouse-drags to select text ranges\n\t\t\t\t\t\t\t// tree.debug(\"<span title> got event \" + event.type);\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t.on(\"keydown\" + ns, function (event) {\n\t\t\t\t\t\t// TODO: also bind keyup and keypress\n\t\t\t\t\t\t// tree.debug(\"got event \" + event.type + \", hasFocus:\" + tree.hasFocus());\n\t\t\t\t\t\t// if(opts.disabled || opts.keyboard === false || !tree.hasFocus() ){\n\t\t\t\t\t\tif (opts.disabled || opts.keyboard === false) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar res,\n\t\t\t\t\t\t\tnode = tree.focusNode, // node may be null\n\t\t\t\t\t\t\tctx = tree._makeHookContext(node || tree, event),\n\t\t\t\t\t\t\tprevPhase = tree.phase;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\ttree.phase = \"userEvent\";\n\t\t\t\t\t\t\t// If a 'fancytreekeydown' handler returns false, skip the default\n\t\t\t\t\t\t\t// handling (implemented by tree.nodeKeydown()).\n\t\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\t\tres = tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\"keydown\",\n\t\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tres = tree._triggerTreeEvent(\"keydown\", event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (res === \"preventNav\") {\n\t\t\t\t\t\t\t\tres = true; // prevent keyboard navigation, but don't prevent default handling of embedded input controls\n\t\t\t\t\t\t\t} else if (res !== false) {\n\t\t\t\t\t\t\t\tres = tree._callHook(\"nodeKeydown\", ctx);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn res;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\ttree.phase = prevPhase;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on(\"mousedown\" + ns, function (event) {\n\t\t\t\t\t\tvar et = FT.getEventTarget(event);\n\t\t\t\t\t\t// self.tree.debug(\"event(\" + event.type + \"): node: \", et.node);\n\t\t\t\t\t\t// #712: Store the clicked node, so we can use it when we get a focusin event\n\t\t\t\t\t\t//       ('click' event fires after focusin)\n\t\t\t\t\t\t// tree.debug(\"event(\" + event.type + \"): node: \", et.node);\n\t\t\t\t\t\ttree._lastMousedownNode = et ? et.node : null;\n\t\t\t\t\t\t// #789: Store the node also for a short period, so we can use it\n\t\t\t\t\t\t// in a *resulting* focusin event\n\t\t\t\t\t\ttree._setExpiringValue(\n\t\t\t\t\t\t\t\"mouseDownNode\",\n\t\t\t\t\t\t\ttree._lastMousedownNode\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t\t.on(\"click\" + ns + \" dblclick\" + ns, function (event) {\n\t\t\t\t\t\tif (opts.disabled) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar ctx,\n\t\t\t\t\t\t\tet = FT.getEventTarget(event),\n\t\t\t\t\t\t\tnode = et.node,\n\t\t\t\t\t\t\ttree = self.tree,\n\t\t\t\t\t\t\tprevPhase = tree.phase;\n\n\t\t\t\t\t\t// self.tree.debug(\"event(\" + event.type + \"): node: \", node);\n\t\t\t\t\t\tif (!node) {\n\t\t\t\t\t\t\treturn true; // Allow bubbling of other events\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx = tree._makeHookContext(node, event);\n\t\t\t\t\t\t// self.tree.debug(\"event(\" + event.type + \"): node: \", node);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\ttree.phase = \"userEvent\";\n\t\t\t\t\t\t\tswitch (event.type) {\n\t\t\t\t\t\t\t\tcase \"click\":\n\t\t\t\t\t\t\t\t\tctx.targetType = et.type;\n\t\t\t\t\t\t\t\t\tif (node.isPagingNode()) {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\ttree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\t\t\t\"clickPaging\",\n\t\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t\t\t\t) === true\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\t\"click\",\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t\t) === false\n\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t: tree._callHook(\"nodeClick\", ctx);\n\t\t\t\t\t\t\t\tcase \"dblclick\":\n\t\t\t\t\t\t\t\t\tctx.targetType = et.type;\n\t\t\t\t\t\t\t\t\treturn tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\t\"dblclick\",\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t\t) === false\n\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t: tree._callHook(\"nodeDblclick\", ctx);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\ttree.phase = prevPhase;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t/** Return the active node or null.\n\t\t\t * @returns {FancytreeNode}\n\t\t\t * @deprecated Use methods of the Fancytree instance instead (<a href=\"Fancytree_Widget.html\">example above</a>).\n\t\t\t */\n\t\t\tgetActiveNode: function () {\n\t\t\t\tthis._deprecationWarning(\"getActiveNode\");\n\t\t\t\treturn this.tree.activeNode;\n\t\t\t},\n\t\t\t/** Return the matching node or null.\n\t\t\t * @param {string} key\n\t\t\t * @returns {FancytreeNode}\n\t\t\t * @deprecated Use methods of the Fancytree instance instead (<a href=\"Fancytree_Widget.html\">example above</a>).\n\t\t\t */\n\t\t\tgetNodeByKey: function (key) {\n\t\t\t\tthis._deprecationWarning(\"getNodeByKey\");\n\t\t\t\treturn this.tree.getNodeByKey(key);\n\t\t\t},\n\t\t\t/** Return the invisible system root node.\n\t\t\t * @returns {FancytreeNode}\n\t\t\t * @deprecated Use methods of the Fancytree instance instead (<a href=\"Fancytree_Widget.html\">example above</a>).\n\t\t\t */\n\t\t\tgetRootNode: function () {\n\t\t\t\tthis._deprecationWarning(\"getRootNode\");\n\t\t\t\treturn this.tree.rootNode;\n\t\t\t},\n\t\t\t/** Return the current tree instance.\n\t\t\t * @returns {Fancytree}\n\t\t\t * @deprecated Use `$.ui.fancytree.getTree()` instead (<a href=\"Fancytree_Widget.html\">example above</a>).\n\t\t\t */\n\t\t\tgetTree: function () {\n\t\t\t\tthis._deprecationWarning(\"getTree\");\n\t\t\t\treturn this.tree;\n\t\t\t},\n\t\t}\n\t);\n\n\t// $.ui.fancytree was created by the widget factory. Create a local shortcut:\n\tFT = $.ui.fancytree;\n\n\t/**\n\t * Static members in the `$.ui.fancytree` namespace.\n\t * This properties and methods can be accessed without instantiating a concrete\n\t * Fancytree instance.\n\t *\n\t * @example\n\t * // Access static members:\n\t * var node = $.ui.fancytree.getNode(element);\n\t * alert($.ui.fancytree.version);\n\t *\n\t * @mixin Fancytree_Static\n\t */\n\t$.extend(\n\t\t$.ui.fancytree,\n\t\t/** @lends Fancytree_Static# */\n\t\t{\n\t\t\t/** Version number `\"MAJOR.MINOR.PATCH\"`\n\t\t\t * @type {string} */\n\t\t\tversion: \"2.38.3\", // Set to semver by 'grunt release'\n\t\t\t/** @type {string}\n\t\t\t * @description `\"production\" for release builds` */\n\t\t\tbuildType: \"production\", // Set to 'production' by 'grunt build'\n\t\t\t/** @type {int}\n\t\t\t * @description 0: silent .. 5: verbose (default: 3 for release builds). */\n\t\t\tdebugLevel: 3, // Set to 3 by 'grunt build'\n\t\t\t// Used by $.ui.fancytree.debug() and as default for tree.options.debugLevel\n\n\t\t\t_nextId: 1,\n\t\t\t_nextNodeKey: 1,\n\t\t\t_extensions: {},\n\t\t\t// focusTree: null,\n\n\t\t\t/** Expose class object as `$.ui.fancytree._FancytreeClass`.\n\t\t\t * Useful to extend `$.ui.fancytree._FancytreeClass.prototype`.\n\t\t\t * @type {Fancytree}\n\t\t\t */\n\t\t\t_FancytreeClass: Fancytree,\n\t\t\t/** Expose class object as $.ui.fancytree._FancytreeNodeClass\n\t\t\t * Useful to extend `$.ui.fancytree._FancytreeNodeClass.prototype`.\n\t\t\t * @type {FancytreeNode}\n\t\t\t */\n\t\t\t_FancytreeNodeClass: FancytreeNode,\n\t\t\t/* Feature checks to provide backwards compatibility */\n\t\t\tjquerySupports: {\n\t\t\t\t// http://jqueryui.com/upgrade-guide/1.9/#deprecated-offset-option-merged-into-my-and-at\n\t\t\t\tpositionMyOfs: isVersionAtLeast($.ui.version, 1, 9),\n\t\t\t},\n\t\t\t/** Throw an error if condition fails (debug method).\n\t\t\t * @param {boolean} cond\n\t\t\t * @param {string} msg\n\t\t\t */\n\t\t\tassert: function (cond, msg) {\n\t\t\t\treturn _assert(cond, msg);\n\t\t\t},\n\t\t\t/** Create a new Fancytree instance on a target element.\n\t\t\t *\n\t\t\t * @param {Element | jQueryObject | string} el Target DOM element or selector\n\t\t\t * @param {FancytreeOptions} [opts] Fancytree options\n\t\t\t * @returns {Fancytree} new tree instance\n\t\t\t * @example\n\t\t\t * var tree = $.ui.fancytree.createTree(\"#tree\", {\n\t\t\t *     source: {url: \"my/webservice\"}\n\t\t\t * }); // Create tree for this matching element\n\t\t\t *\n\t\t\t * @since 2.25\n\t\t\t */\n\t\t\tcreateTree: function (el, opts) {\n\t\t\t\tvar $tree = $(el).fancytree(opts);\n\t\t\t\treturn FT.getTree($tree);\n\t\t\t},\n\t\t\t/** Return a function that executes *fn* at most every *timeout* ms.\n\t\t\t * @param {integer} timeout\n\t\t\t * @param {function} fn\n\t\t\t * @param {boolean} [invokeAsap=false]\n\t\t\t * @param {any} [ctx]\n\t\t\t */\n\t\t\tdebounce: function (timeout, fn, invokeAsap, ctx) {\n\t\t\t\tvar timer;\n\t\t\t\tif (arguments.length === 3 && typeof invokeAsap !== \"boolean\") {\n\t\t\t\t\tctx = invokeAsap;\n\t\t\t\t\tinvokeAsap = false;\n\t\t\t\t}\n\t\t\t\treturn function () {\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\tctx = ctx || this;\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tinvokeAsap && !timer && fn.apply(ctx, args);\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = setTimeout(function () {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\tinvokeAsap || fn.apply(ctx, args);\n\t\t\t\t\t\ttimer = null;\n\t\t\t\t\t}, timeout);\n\t\t\t\t};\n\t\t\t},\n\t\t\t/** Write message to console if debugLevel >= 4\n\t\t\t * @param {string} msg\n\t\t\t */\n\t\t\tdebug: function (msg) {\n\t\t\t\tif ($.ui.fancytree.debugLevel >= 4) {\n\t\t\t\t\tconsoleApply(\"log\", arguments);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Write error message to console if debugLevel >= 1.\n\t\t\t * @param {string} msg\n\t\t\t */\n\t\t\terror: function (msg) {\n\t\t\t\tif ($.ui.fancytree.debugLevel >= 1) {\n\t\t\t\t\tconsoleApply(\"error\", arguments);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Convert `<`, `>`, `&`, `\"`, `'`, and `/` to the equivalent entities.\n\t\t\t *\n\t\t\t * @param {string} s\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tescapeHtml: function (s) {\n\t\t\t\treturn (\"\" + s).replace(REX_HTML, function (s) {\n\t\t\t\t\treturn ENTITY_MAP[s];\n\t\t\t\t});\n\t\t\t},\n\t\t\t/** Make jQuery.position() arguments backwards compatible, i.e. if\n\t\t\t * jQuery UI version <= 1.8, convert\n\t\t\t *   { my: \"left+3 center\", at: \"left bottom\", of: $target }\n\t\t\t * to\n\t\t\t *   { my: \"left center\", at: \"left bottom\", of: $target, offset: \"3  0\" }\n\t\t\t *\n\t\t\t * See http://jqueryui.com/upgrade-guide/1.9/#deprecated-offset-option-merged-into-my-and-at\n\t\t\t * and http://jsfiddle.net/mar10/6xtu9a4e/\n\t\t\t *\n\t\t\t * @param {object} opts\n\t\t\t * @returns {object} the (potentially modified) original opts hash object\n\t\t\t */\n\t\t\tfixPositionOptions: function (opts) {\n\t\t\t\tif (opts.offset || (\"\" + opts.my + opts.at).indexOf(\"%\") >= 0) {\n\t\t\t\t\t$.error(\n\t\t\t\t\t\t\"expected new position syntax (but '%' is not supported)\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (!$.ui.fancytree.jquerySupports.positionMyOfs) {\n\t\t\t\t\tvar // parse 'left+3 center' into ['left+3 center', 'left', '+3', 'center', undefined]\n\t\t\t\t\t\tmyParts = /(\\w+)([+-]?\\d+)?\\s+(\\w+)([+-]?\\d+)?/.exec(\n\t\t\t\t\t\t\topts.my\n\t\t\t\t\t\t),\n\t\t\t\t\t\tatParts = /(\\w+)([+-]?\\d+)?\\s+(\\w+)([+-]?\\d+)?/.exec(\n\t\t\t\t\t\t\topts.at\n\t\t\t\t\t\t),\n\t\t\t\t\t\t// convert to numbers\n\t\t\t\t\t\tdx =\n\t\t\t\t\t\t\t(myParts[2] ? +myParts[2] : 0) +\n\t\t\t\t\t\t\t(atParts[2] ? +atParts[2] : 0),\n\t\t\t\t\t\tdy =\n\t\t\t\t\t\t\t(myParts[4] ? +myParts[4] : 0) +\n\t\t\t\t\t\t\t(atParts[4] ? +atParts[4] : 0);\n\n\t\t\t\t\topts = $.extend({}, opts, {\n\t\t\t\t\t\t// make a copy and overwrite\n\t\t\t\t\t\tmy: myParts[1] + \" \" + myParts[3],\n\t\t\t\t\t\tat: atParts[1] + \" \" + atParts[3],\n\t\t\t\t\t});\n\t\t\t\t\tif (dx || dy) {\n\t\t\t\t\t\topts.offset = \"\" + dx + \" \" + dy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn opts;\n\t\t\t},\n\t\t\t/** Return a {node: FancytreeNode, type: TYPE} object for a mouse event.\n\t\t\t *\n\t\t\t * @param {Event} event Mouse event, e.g. click, ...\n\t\t\t * @returns {object} Return a {node: FancytreeNode, type: TYPE} object\n\t\t\t *     TYPE: 'title' | 'prefix' | 'expander' | 'checkbox' | 'icon' | undefined\n\t\t\t */\n\t\t\tgetEventTarget: function (event) {\n\t\t\t\tvar $target,\n\t\t\t\t\ttree,\n\t\t\t\t\ttcn = event && event.target ? event.target.className : \"\",\n\t\t\t\t\tres = { node: this.getNode(event.target), type: undefined };\n\t\t\t\t// We use a fast version of $(res.node).hasClass()\n\t\t\t\t// See http://jsperf.com/test-for-classname/2\n\t\t\t\tif (/\\bfancytree-title\\b/.test(tcn)) {\n\t\t\t\t\tres.type = \"title\";\n\t\t\t\t} else if (/\\bfancytree-expander\\b/.test(tcn)) {\n\t\t\t\t\tres.type =\n\t\t\t\t\t\tres.node.hasChildren() === false\n\t\t\t\t\t\t\t? \"prefix\"\n\t\t\t\t\t\t\t: \"expander\";\n\t\t\t\t\t// }else if( /\\bfancytree-checkbox\\b/.test(tcn) || /\\bfancytree-radio\\b/.test(tcn) ){\n\t\t\t\t} else if (/\\bfancytree-checkbox\\b/.test(tcn)) {\n\t\t\t\t\tres.type = \"checkbox\";\n\t\t\t\t} else if (/\\bfancytree(-custom)?-icon\\b/.test(tcn)) {\n\t\t\t\t\tres.type = \"icon\";\n\t\t\t\t} else if (/\\bfancytree-node\\b/.test(tcn)) {\n\t\t\t\t\t// Somewhere near the title\n\t\t\t\t\tres.type = \"title\";\n\t\t\t\t} else if (event && event.target) {\n\t\t\t\t\t$target = $(event.target);\n\t\t\t\t\tif ($target.is(\"ul[role=group]\")) {\n\t\t\t\t\t\t// #nnn: Clicking right to a node may hit the surrounding UL\n\t\t\t\t\t\ttree = res.node && res.node.tree;\n\t\t\t\t\t\t(tree || FT).debug(\"Ignoring click on outer UL.\");\n\t\t\t\t\t\tres.node = null;\n\t\t\t\t\t} else if ($target.closest(\".fancytree-title\").length) {\n\t\t\t\t\t\t// #228: clicking an embedded element inside a title\n\t\t\t\t\t\tres.type = \"title\";\n\t\t\t\t\t} else if ($target.closest(\".fancytree-checkbox\").length) {\n\t\t\t\t\t\t// E.g. <svg> inside checkbox span\n\t\t\t\t\t\tres.type = \"checkbox\";\n\t\t\t\t\t} else if ($target.closest(\".fancytree-expander\").length) {\n\t\t\t\t\t\tres.type = \"expander\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t},\n\t\t\t/** Return a string describing the affected node region for a mouse event.\n\t\t\t *\n\t\t\t * @param {Event} event Mouse event, e.g. click, mousemove, ...\n\t\t\t * @returns {string} 'title' | 'prefix' | 'expander' | 'checkbox' | 'icon' | undefined\n\t\t\t */\n\t\t\tgetEventTargetType: function (event) {\n\t\t\t\treturn this.getEventTarget(event).type;\n\t\t\t},\n\t\t\t/** Return a FancytreeNode instance from element, event, or jQuery object.\n\t\t\t *\n\t\t\t * @param {Element | jQueryObject | Event} el\n\t\t\t * @returns {FancytreeNode} matching node or null\n\t\t\t */\n\t\t\tgetNode: function (el) {\n\t\t\t\tif (el instanceof FancytreeNode) {\n\t\t\t\t\treturn el; // el already was a FancytreeNode\n\t\t\t\t} else if (el instanceof $) {\n\t\t\t\t\tel = el[0]; // el was a jQuery object: use the DOM element\n\t\t\t\t} else if (el.originalEvent !== undefined) {\n\t\t\t\t\tel = el.target; // el was an Event\n\t\t\t\t}\n\t\t\t\twhile (el) {\n\t\t\t\t\tif (el.ftnode) {\n\t\t\t\t\t\treturn el.ftnode;\n\t\t\t\t\t}\n\t\t\t\t\tel = el.parentNode;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t/** Return a Fancytree instance, from element, index, event, or jQueryObject.\n\t\t\t *\n\t\t\t * @param {Element | jQueryObject | Event | integer | string} [el]\n\t\t\t * @returns {Fancytree} matching tree or null\n\t\t\t * @example\n\t\t\t * $.ui.fancytree.getTree();  // Get first Fancytree instance on page\n\t\t\t * $.ui.fancytree.getTree(1);  // Get second Fancytree instance on page\n\t\t\t * $.ui.fancytree.getTree(event);  // Get tree for this mouse- or keyboard event\n\t\t\t * $.ui.fancytree.getTree(\"foo\");  // Get tree for this `opts.treeId`\n\t\t\t * $.ui.fancytree.getTree(\"#tree\");  // Get tree for this matching element\n\t\t\t *\n\t\t\t * @since 2.13\n\t\t\t */\n\t\t\tgetTree: function (el) {\n\t\t\t\tvar widget,\n\t\t\t\t\torgEl = el;\n\n\t\t\t\tif (el instanceof Fancytree) {\n\t\t\t\t\treturn el; // el already was a Fancytree\n\t\t\t\t}\n\t\t\t\tif (el === undefined) {\n\t\t\t\t\tel = 0; // get first tree\n\t\t\t\t}\n\t\t\t\tif (typeof el === \"number\") {\n\t\t\t\t\tel = $(\".fancytree-container\").eq(el); // el was an integer: return nth instance\n\t\t\t\t} else if (typeof el === \"string\") {\n\t\t\t\t\t// `el` may be a treeId or a selector:\n\t\t\t\t\tel = $(\"#ft-id-\" + orgEl).eq(0);\n\t\t\t\t\tif (!el.length) {\n\t\t\t\t\t\tel = $(orgEl).eq(0); // el was a selector: use first match\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tel instanceof Element ||\n\t\t\t\t\tel instanceof HTMLDocument\n\t\t\t\t) {\n\t\t\t\t\tel = $(el);\n\t\t\t\t} else if (el instanceof $) {\n\t\t\t\t\tel = el.eq(0); // el was a jQuery object: use the first\n\t\t\t\t} else if (el.originalEvent !== undefined) {\n\t\t\t\t\tel = $(el.target); // el was an Event\n\t\t\t\t}\n\t\t\t\t// el is a jQuery object wit one element here\n\t\t\t\tel = el.closest(\":ui-fancytree\");\n\t\t\t\twidget = el.data(\"ui-fancytree\") || el.data(\"fancytree\"); // the latter is required by jQuery <= 1.8\n\t\t\t\treturn widget ? widget.tree : null;\n\t\t\t},\n\t\t\t/** Return an option value that has a default, but may be overridden by a\n\t\t\t * callback or a node instance attribute.\n\t\t\t *\n\t\t\t * Evaluation sequence:\n\t\t\t *\n\t\t\t * If `tree.options.<optionName>` is a callback that returns something, use that.\n\t\t\t * Else if `node.<optionName>` is defined, use that.\n\t\t\t * Else if `tree.options.<optionName>` is a value, use that.\n\t\t\t * Else use `defaultValue`.\n\t\t\t *\n\t\t\t * @param {string} optionName name of the option property (on node and tree)\n\t\t\t * @param {FancytreeNode} node passed to the callback\n\t\t\t * @param {object} nodeObject where to look for the local option property, e.g. `node` or `node.data`\n\t\t\t * @param {object} treeOption where to look for the tree option, e.g. `tree.options` or `tree.options.dnd5`\n\t\t\t * @param {any} [defaultValue]\n\t\t\t * @returns {any}\n\t\t\t *\n\t\t\t * @example\n\t\t\t * // Check for node.foo, tree,options.foo(), and tree.options.foo:\n\t\t\t * $.ui.fancytree.evalOption(\"foo\", node, node, tree.options);\n\t\t\t * // Check for node.data.bar, tree,options.qux.bar(), and tree.options.qux.bar:\n\t\t\t * $.ui.fancytree.evalOption(\"bar\", node, node.data, tree.options.qux);\n\t\t\t *\n\t\t\t * @since 2.22\n\t\t\t */\n\t\t\tevalOption: function (\n\t\t\t\toptionName,\n\t\t\t\tnode,\n\t\t\t\tnodeObject,\n\t\t\t\ttreeOptions,\n\t\t\t\tdefaultValue\n\t\t\t) {\n\t\t\t\tvar ctx,\n\t\t\t\t\tres,\n\t\t\t\t\ttree = node.tree,\n\t\t\t\t\ttreeOpt = treeOptions[optionName],\n\t\t\t\t\tnodeOpt = nodeObject[optionName];\n\n\t\t\t\tif (_isFunction(treeOpt)) {\n\t\t\t\t\tctx = {\n\t\t\t\t\t\tnode: node,\n\t\t\t\t\t\ttree: tree,\n\t\t\t\t\t\twidget: tree.widget,\n\t\t\t\t\t\toptions: tree.widget.options,\n\t\t\t\t\t\ttypeInfo: tree.types[node.type] || {},\n\t\t\t\t\t};\n\t\t\t\t\tres = treeOpt.call(tree, { type: optionName }, ctx);\n\t\t\t\t\tif (res == null) {\n\t\t\t\t\t\tres = nodeOpt;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tres = nodeOpt == null ? treeOpt : nodeOpt;\n\t\t\t\t}\n\t\t\t\tif (res == null) {\n\t\t\t\t\tres = defaultValue; // no option set at all: return default\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t},\n\t\t\t/** Set expander, checkbox, or node icon, supporting string and object format.\n\t\t\t *\n\t\t\t * @param {Element | jQueryObject} span\n\t\t\t * @param {string} baseClass\n\t\t\t * @param {string | object} icon\n\t\t\t * @since 2.27\n\t\t\t */\n\t\t\tsetSpanIcon: function (span, baseClass, icon) {\n\t\t\t\tvar $span = $(span);\n\n\t\t\t\tif (typeof icon === \"string\") {\n\t\t\t\t\t$span.attr(\"class\", baseClass + \" \" + icon);\n\t\t\t\t} else {\n\t\t\t\t\t// support object syntax: { text: ligature, addClasse: classname }\n\t\t\t\t\tif (icon.text) {\n\t\t\t\t\t\t$span.text(\"\" + icon.text);\n\t\t\t\t\t} else if (icon.html) {\n\t\t\t\t\t\tspan.innerHTML = icon.html;\n\t\t\t\t\t}\n\t\t\t\t\t$span.attr(\n\t\t\t\t\t\t\"class\",\n\t\t\t\t\t\tbaseClass + \" \" + (icon.addClass || \"\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Convert a keydown or mouse event to a canonical string like 'ctrl+a',\n\t\t\t * 'ctrl+shift+f2', 'shift+leftdblclick'.\n\t\t\t *\n\t\t\t * This is especially handy for switch-statements in event handlers.\n\t\t\t *\n\t\t\t * @param {event}\n\t\t\t * @returns {string}\n\t\t\t *\n\t\t\t * @example\n\n\t\t\tswitch( $.ui.fancytree.eventToString(event) ) {\n\t\t\t\tcase \"-\":\n\t\t\t\t\ttree.nodeSetExpanded(ctx, false);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"shift+return\":\n\t\t\t\t\ttree.nodeSetActive(ctx, true);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tres = node.navigate(event.which, activate);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\thandled = false;\n\t\t\t}\n\t\t\tif( handled ){\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\t*/\n\t\t\teventToString: function (event) {\n\t\t\t\t// Poor-man's hotkeys. See here for a complete implementation:\n\t\t\t\t//   https://github.com/jeresig/jquery.hotkeys\n\t\t\t\tvar which = event.which,\n\t\t\t\t\tet = event.type,\n\t\t\t\t\ts = [];\n\n\t\t\t\tif (event.altKey) {\n\t\t\t\t\ts.push(\"alt\");\n\t\t\t\t}\n\t\t\t\tif (event.ctrlKey) {\n\t\t\t\t\ts.push(\"ctrl\");\n\t\t\t\t}\n\t\t\t\tif (event.metaKey) {\n\t\t\t\t\ts.push(\"meta\");\n\t\t\t\t}\n\t\t\t\tif (event.shiftKey) {\n\t\t\t\t\ts.push(\"shift\");\n\t\t\t\t}\n\n\t\t\t\tif (et === \"click\" || et === \"dblclick\") {\n\t\t\t\t\ts.push(MOUSE_BUTTONS[event.button] + et);\n\t\t\t\t} else if (et === \"wheel\") {\n\t\t\t\t\ts.push(et);\n\t\t\t\t} else if (!IGNORE_KEYCODES[which]) {\n\t\t\t\t\ts.push(\n\t\t\t\t\t\tSPECIAL_KEYCODES[which] ||\n\t\t\t\t\t\t\tString.fromCharCode(which).toLowerCase()\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn s.join(\"+\");\n\t\t\t},\n\t\t\t/** Write message to console if debugLevel >= 3\n\t\t\t * @param {string} msg\n\t\t\t */\n\t\t\tinfo: function (msg) {\n\t\t\t\tif ($.ui.fancytree.debugLevel >= 3) {\n\t\t\t\t\tconsoleApply(\"info\", arguments);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/* @deprecated: use eventToString(event) instead.\n\t\t\t */\n\t\t\tkeyEventToString: function (event) {\n\t\t\t\tthis.warn(\n\t\t\t\t\t\"keyEventToString() is deprecated: use eventToString()\"\n\t\t\t\t);\n\t\t\t\treturn this.eventToString(event);\n\t\t\t},\n\t\t\t/** Return a wrapped handler method, that provides `this._super`.\n\t\t\t *\n\t\t\t * @example\n\t\t\t\t// Implement `opts.createNode` event to add the 'draggable' attribute\n\t\t\t\t$.ui.fancytree.overrideMethod(ctx.options, \"createNode\", function(event, data) {\n\t\t\t\t\t// Default processing if any\n\t\t\t\t\tthis._super.apply(this, arguments);\n\t\t\t\t\t// Add 'draggable' attribute\n\t\t\t\t\tdata.node.span.draggable = true;\n\t\t\t\t});\n\t\t\t *\n\t\t\t * @param {object} instance\n\t\t\t * @param {string} methodName\n\t\t\t * @param {function} handler\n\t\t\t * @param {object} [context] optional context\n\t\t\t */\n\t\t\toverrideMethod: function (instance, methodName, handler, context) {\n\t\t\t\tvar prevSuper,\n\t\t\t\t\t_super = instance[methodName] || $.noop;\n\n\t\t\t\tinstance[methodName] = function () {\n\t\t\t\t\tvar self = context || this;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tprevSuper = self._super;\n\t\t\t\t\t\tself._super = _super;\n\t\t\t\t\t\treturn handler.apply(self, arguments);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tself._super = prevSuper;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\t/**\n\t\t\t * Parse tree data from HTML <ul> markup\n\t\t\t *\n\t\t\t * @param {jQueryObject} $ul\n\t\t\t * @returns {NodeData[]}\n\t\t\t */\n\t\t\tparseHtml: function ($ul) {\n\t\t\t\tvar classes,\n\t\t\t\t\tclassName,\n\t\t\t\t\textraClasses,\n\t\t\t\t\ti,\n\t\t\t\t\tiPos,\n\t\t\t\t\tl,\n\t\t\t\t\ttmp,\n\t\t\t\t\ttmp2,\n\t\t\t\t\t$children = $ul.find(\">li\"),\n\t\t\t\t\tchildren = [];\n\n\t\t\t\t$children.each(function () {\n\t\t\t\t\tvar allData,\n\t\t\t\t\t\tlowerCaseAttr,\n\t\t\t\t\t\t$li = $(this),\n\t\t\t\t\t\t$liSpan = $li.find(\">span\", this).first(),\n\t\t\t\t\t\t$liA = $liSpan.length ? null : $li.find(\">a\").first(),\n\t\t\t\t\t\td = { tooltip: null, data: {} };\n\n\t\t\t\t\tif ($liSpan.length) {\n\t\t\t\t\t\td.title = $liSpan.html();\n\t\t\t\t\t} else if ($liA && $liA.length) {\n\t\t\t\t\t\t// If a <li><a> tag is specified, use it literally and extract href/target.\n\t\t\t\t\t\td.title = $liA.html();\n\t\t\t\t\t\td.data.href = $liA.attr(\"href\");\n\t\t\t\t\t\td.data.target = $liA.attr(\"target\");\n\t\t\t\t\t\td.tooltip = $liA.attr(\"title\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If only a <li> tag is specified, use the trimmed string up to\n\t\t\t\t\t\t// the next child <ul> tag.\n\t\t\t\t\t\td.title = $li.html();\n\t\t\t\t\t\tiPos = d.title.search(/<ul/i);\n\t\t\t\t\t\tif (iPos >= 0) {\n\t\t\t\t\t\t\td.title = d.title.substring(0, iPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\td.title = _trim(d.title);\n\n\t\t\t\t\t// Make sure all fields exist\n\t\t\t\t\tfor (i = 0, l = CLASS_ATTRS.length; i < l; i++) {\n\t\t\t\t\t\td[CLASS_ATTRS[i]] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\t// Initialize to `true`, if class is set and collect extraClasses\n\t\t\t\t\tclasses = this.className.split(\" \");\n\t\t\t\t\textraClasses = [];\n\t\t\t\t\tfor (i = 0, l = classes.length; i < l; i++) {\n\t\t\t\t\t\tclassName = classes[i];\n\t\t\t\t\t\tif (CLASS_ATTR_MAP[className]) {\n\t\t\t\t\t\t\td[className] = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\textraClasses.push(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\td.extraClasses = extraClasses.join(\" \");\n\n\t\t\t\t\t// Parse node options from ID, title and class attributes\n\t\t\t\t\ttmp = $li.attr(\"title\");\n\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\td.tooltip = tmp; // overrides <a title='...'>\n\t\t\t\t\t}\n\t\t\t\t\ttmp = $li.attr(\"id\");\n\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\td.key = tmp;\n\t\t\t\t\t}\n\t\t\t\t\t// Translate hideCheckbox -> checkbox:false\n\t\t\t\t\tif ($li.attr(\"hideCheckbox\")) {\n\t\t\t\t\t\td.checkbox = false;\n\t\t\t\t\t}\n\t\t\t\t\t// Add <li data-NAME='...'> as node.data.NAME\n\t\t\t\t\tallData = _getElementDataAsDict($li);\n\t\t\t\t\tif (allData && !$.isEmptyObject(allData)) {\n\t\t\t\t\t\t// #507: convert data-hidecheckbox (lower case) to hideCheckbox\n\t\t\t\t\t\tfor (lowerCaseAttr in NODE_ATTR_LOWERCASE_MAP) {\n\t\t\t\t\t\t\tif (_hasProp(allData, lowerCaseAttr)) {\n\t\t\t\t\t\t\t\tallData[\n\t\t\t\t\t\t\t\t\tNODE_ATTR_LOWERCASE_MAP[lowerCaseAttr]\n\t\t\t\t\t\t\t\t] = allData[lowerCaseAttr];\n\t\t\t\t\t\t\t\tdelete allData[lowerCaseAttr];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #56: Allow to set special node.attributes from data-...\n\t\t\t\t\t\tfor (i = 0, l = NODE_ATTRS.length; i < l; i++) {\n\t\t\t\t\t\t\ttmp = NODE_ATTRS[i];\n\t\t\t\t\t\t\ttmp2 = allData[tmp];\n\t\t\t\t\t\t\tif (tmp2 != null) {\n\t\t\t\t\t\t\t\tdelete allData[tmp];\n\t\t\t\t\t\t\t\td[tmp] = tmp2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// All other data-... goes to node.data...\n\t\t\t\t\t\t$.extend(d.data, allData);\n\t\t\t\t\t}\n\t\t\t\t\t// Recursive reading of child nodes, if LI tag contains an UL tag\n\t\t\t\t\t$ul = $li.find(\">ul\").first();\n\t\t\t\t\tif ($ul.length) {\n\t\t\t\t\t\td.children = $.ui.fancytree.parseHtml($ul);\n\t\t\t\t\t} else {\n\t\t\t\t\t\td.children = d.lazy ? undefined : null;\n\t\t\t\t\t}\n\t\t\t\t\tchildren.push(d);\n\t\t\t\t\t// FT.debug(\"parse \", d, children);\n\t\t\t\t});\n\t\t\t\treturn children;\n\t\t\t},\n\t\t\t/** Add Fancytree extension definition to the list of globally available extensions.\n\t\t\t *\n\t\t\t * @param {object} definition\n\t\t\t */\n\t\t\tregisterExtension: function (definition) {\n\t\t\t\t_assert(\n\t\t\t\t\tdefinition.name != null,\n\t\t\t\t\t\"extensions must have a `name` property.\"\n\t\t\t\t);\n\t\t\t\t_assert(\n\t\t\t\t\tdefinition.version != null,\n\t\t\t\t\t\"extensions must have a `version` property.\"\n\t\t\t\t);\n\t\t\t\t$.ui.fancytree._extensions[definition.name] = definition;\n\t\t\t},\n\t\t\t/** Replacement for the deprecated `jQuery.trim()`.\n\t\t\t *\n\t\t\t * @param {string} text\n\t\t\t */\n\t\t\ttrim: _trim,\n\t\t\t/** Inverse of escapeHtml().\n\t\t\t *\n\t\t\t * @param {string} s\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tunescapeHtml: function (s) {\n\t\t\t\tvar e = document.createElement(\"div\");\n\t\t\t\te.innerHTML = s;\n\t\t\t\treturn e.childNodes.length === 0\n\t\t\t\t\t? \"\"\n\t\t\t\t\t: e.childNodes[0].nodeValue;\n\t\t\t},\n\t\t\t/** Write warning message to console if debugLevel >= 2.\n\t\t\t * @param {string} msg\n\t\t\t */\n\t\t\twarn: function (msg) {\n\t\t\t\tif ($.ui.fancytree.debugLevel >= 2) {\n\t\t\t\t\tconsoleApply(\"warn\", arguments);\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t);\n\n\t// Value returned by `require('jquery.fancytree')`\n\treturn $.ui.fancytree;\n}); // End of closure\n", "/*!\n * Fancytree \"Win8\" skin.\n *\n * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from\n * the LESS templates.\n */\n/*******************************************************************************\n * Common Styles for Fancytree Skins.\n *\n * This section is automatically generated from the `skin-common.less` template.\n *\n * Copyright (c) 2008-2023, Martin Wendt (https://wwWendt.de)\n * Released under the MIT license\n * https://github.com/mar10/fancytree/wiki/LicenseInfo\n *\n * @version 2.38.3\n * @date 2023-02-01T20:52:50Z\n******************************************************************************/\n/*------------------------------------------------------------------------------\n * Helpers\n *----------------------------------------------------------------------------*/\n.fancytree-helper-hidden {\n  display: none;\n}\n.fancytree-helper-indeterminate-cb {\n  color: #777;\n}\n.fancytree-helper-disabled {\n  color: #c0c0c0;\n}\n/* Helper to allow spinning loader icon with glyph-, ligature-, and SVG-icons. */\n.fancytree-helper-spin {\n  -webkit-animation: spin 1000ms infinite linear;\n  animation: spin 1000ms infinite linear;\n}\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n/*------------------------------------------------------------------------------\n * Container and UL / LI\n *----------------------------------------------------------------------------*/\nul.fancytree-container {\n  font-family: tahoma, arial, helvetica;\n  font-size: 10pt;\n  white-space: nowrap;\n  padding: 3px;\n  margin: 0;\n  background-color: white;\n  border: 1px dotted gray;\n  min-height: 0%;\n  position: relative;\n}\nul.fancytree-container ul {\n  padding: 0 0 0 16px;\n  margin: 0;\n}\nul.fancytree-container ul > li:before {\n  content: none;\n}\nul.fancytree-container li {\n  list-style-image: none;\n  list-style-position: outside;\n  list-style-type: none;\n  -moz-background-clip: border;\n  -moz-background-inline-policy: continuous;\n  -moz-background-origin: padding;\n  background-attachment: scroll;\n  background-color: transparent;\n  background-position: 0px 0px;\n  background-repeat: repeat-y;\n  background-image: none;\n  margin: 0;\n}\nul.fancytree-container li.fancytree-lastsib {\n  background-image: none;\n}\n.ui-fancytree-disabled ul.fancytree-container {\n  opacity: 0.5;\n  background-color: silver;\n}\nul.fancytree-connectors.fancytree-container li {\n  background-image: url(\"../skin-win8/vline.gif\");\n  background-position: 0 0;\n}\nul.fancytree-container li.fancytree-lastsib,\nul.fancytree-no-connector > li {\n  background-image: none;\n}\nli.fancytree-animating {\n  position: relative;\n}\n/*------------------------------------------------------------------------------\n * Common icon definitions\n *----------------------------------------------------------------------------*/\nspan.fancytree-empty,\nspan.fancytree-vline,\nspan.fancytree-expander,\nspan.fancytree-icon,\nspan.fancytree-checkbox,\nspan.fancytree-drag-helper-img,\n#fancytree-drop-marker {\n  width: 16px;\n  height: 16px;\n  display: inline-block;\n  vertical-align: top;\n  background-repeat: no-repeat;\n  background-image: url(\"../skin-win8/icons.gif\");\n  background-position: 0px 0px;\n}\nspan.fancytree-icon,\nspan.fancytree-checkbox,\nspan.fancytree-expander,\nspan.fancytree-custom-icon {\n  margin-top: 2px;\n}\n/* Used by icon option: */\nspan.fancytree-custom-icon {\n  width: 16px;\n  height: 16px;\n  display: inline-block;\n  margin-left: 3px;\n  background-position: 0px 0px;\n}\n/* Used by 'icon' node option: */\nimg.fancytree-icon {\n  width: 16px;\n  height: 16px;\n  margin-left: 3px;\n  margin-top: 2px;\n  vertical-align: top;\n  border-style: none;\n}\n/*------------------------------------------------------------------------------\n * Expander icon\n *\n * Note: IE6 doesn't correctly evaluate multiples class names,\n *\t\t so we create combined class names that can be used in the CSS.\n *\n * Prefix: fancytree-exp-\n * 1st character: 'e': expanded, 'c': collapsed, 'n': no children\n * 2nd character (optional): 'd': lazy (Delayed)\n * 3rd character (optional): 'l': Last sibling\n *----------------------------------------------------------------------------*/\nspan.fancytree-expander {\n  cursor: pointer;\n}\n.fancytree-exp-n span.fancytree-expander,\n.fancytree-exp-nl span.fancytree-expander {\n  background-image: none;\n  cursor: default;\n}\n.fancytree-connectors .fancytree-exp-n span.fancytree-expander,\n.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {\n  background-image: url(\"../skin-win8/icons.gif\");\n  margin-top: 0;\n}\n.fancytree-connectors .fancytree-exp-n span.fancytree-expander,\n.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover {\n  background-position: 0px -64px;\n}\n.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,\n.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover {\n  background-position: -16px -64px;\n}\n.fancytree-exp-c span.fancytree-expander {\n  background-position: 0px -80px;\n}\n.fancytree-exp-c span.fancytree-expander:hover {\n  background-position: -16px -80px;\n}\n.fancytree-exp-cl span.fancytree-expander {\n  background-position: 0px -96px;\n}\n.fancytree-exp-cl span.fancytree-expander:hover {\n  background-position: -16px -96px;\n}\n.fancytree-exp-cd span.fancytree-expander {\n  background-position: -64px -80px;\n}\n.fancytree-exp-cd span.fancytree-expander:hover {\n  background-position: -80px -80px;\n}\n.fancytree-exp-cdl span.fancytree-expander {\n  background-position: -64px -96px;\n}\n.fancytree-exp-cdl span.fancytree-expander:hover {\n  background-position: -80px -96px;\n}\n.fancytree-exp-e span.fancytree-expander,\n.fancytree-exp-ed span.fancytree-expander {\n  background-position: -32px -80px;\n}\n.fancytree-exp-e span.fancytree-expander:hover,\n.fancytree-exp-ed span.fancytree-expander:hover {\n  background-position: -48px -80px;\n}\n.fancytree-exp-el span.fancytree-expander,\n.fancytree-exp-edl span.fancytree-expander {\n  background-position: -32px -96px;\n}\n.fancytree-exp-el span.fancytree-expander:hover,\n.fancytree-exp-edl span.fancytree-expander:hover {\n  background-position: -48px -96px;\n}\n/* Fade out expanders, when container is not hovered or active */\n.fancytree-fade-expander span.fancytree-expander {\n  transition: opacity 1.5s;\n  opacity: 0;\n}\n.fancytree-fade-expander:hover span.fancytree-expander,\n.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,\n.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,\n.fancytree-fade-expander [class*=\"fancytree-statusnode-\"] span.fancytree-expander {\n  transition: opacity 0.6s;\n  opacity: 1;\n}\n/*------------------------------------------------------------------------------\n * Checkbox icon\n *----------------------------------------------------------------------------*/\nspan.fancytree-checkbox {\n  margin-left: 3px;\n  background-position: 0px -32px;\n}\nspan.fancytree-checkbox:hover {\n  background-position: -16px -32px;\n}\nspan.fancytree-checkbox.fancytree-radio {\n  background-position: 0px -48px;\n}\nspan.fancytree-checkbox.fancytree-radio:hover {\n  background-position: -16px -48px;\n}\n.fancytree-partsel span.fancytree-checkbox {\n  background-position: -64px -32px;\n}\n.fancytree-partsel span.fancytree-checkbox:hover {\n  background-position: -80px -32px;\n}\n.fancytree-partsel span.fancytree-checkbox.fancytree-radio {\n  background-position: -64px -48px;\n}\n.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover {\n  background-position: -80px -48px;\n}\n.fancytree-selected span.fancytree-checkbox {\n  background-position: -32px -32px;\n}\n.fancytree-selected span.fancytree-checkbox:hover {\n  background-position: -48px -32px;\n}\n.fancytree-selected span.fancytree-checkbox.fancytree-radio {\n  background-position: -32px -48px;\n}\n.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover {\n  background-position: -48px -48px;\n}\n.fancytree-unselectable span.fancytree-checkbox {\n  opacity: 0.4;\n  filter: alpha(opacity=40);\n}\n.fancytree-unselectable span.fancytree-checkbox:hover {\n  background-position: 0px -32px;\n}\n.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover {\n  background-position: 0px -48px;\n}\n.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover {\n  background-position: -64px -32px;\n}\n.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover {\n  background-position: -32px -32px;\n}\n.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover {\n  background-position: -32px -48px;\n}\n.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox {\n  visibility: hidden;\n}\n.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,\n.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox,\n.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,\n.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox {\n  visibility: unset;\n}\n.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,\n.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox {\n  visibility: unset;\n}\n/*------------------------------------------------------------------------------\n * Node type icon\n * Note: IE6 doesn't correctly evaluate multiples class names,\n *\t\t so we create combined class names that can be used in the CSS.\n *\n * Prefix: fancytree-ico-\n * 1st character: 'e': expanded, 'c': collapsed\n * 2nd character (optional): 'f': folder\n *----------------------------------------------------------------------------*/\nspan.fancytree-icon {\n  margin-left: 3px;\n  background-position: 0px 0px;\n}\n/* Documents */\n.fancytree-ico-c span.fancytree-icon:hover {\n  background-position: -16px 0px;\n}\n.fancytree-has-children.fancytree-ico-c span.fancytree-icon {\n  background-position: -32px 0px;\n}\n.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {\n  background-position: -48px 0px;\n}\n.fancytree-ico-e span.fancytree-icon {\n  background-position: -64px 0px;\n}\n.fancytree-ico-e span.fancytree-icon:hover {\n  background-position: -80px 0px;\n}\n/* Folders */\n.fancytree-ico-cf span.fancytree-icon {\n  background-position: 0px -16px;\n}\n.fancytree-ico-cf span.fancytree-icon:hover {\n  background-position: -16px -16px;\n}\n.fancytree-has-children.fancytree-ico-cf span.fancytree-icon {\n  background-position: -32px -16px;\n}\n.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {\n  background-position: -48px -16px;\n}\n.fancytree-ico-ef span.fancytree-icon {\n  background-position: -64px -16px;\n}\n.fancytree-ico-ef span.fancytree-icon:hover {\n  background-position: -80px -16px;\n}\n.fancytree-loading span.fancytree-expander,\n.fancytree-loading span.fancytree-expander:hover,\n.fancytree-statusnode-loading span.fancytree-icon,\n.fancytree-statusnode-loading span.fancytree-icon:hover,\nspan.fancytree-icon.fancytree-icon-loading {\n  background-image: url(\"../skin-win8/loading.gif\");\n  background-position: 0px 0px;\n}\n/* Status node icons */\n.fancytree-statusnode-error span.fancytree-icon,\n.fancytree-statusnode-error span.fancytree-icon:hover {\n  background-position: 0px -112px;\n}\n/*------------------------------------------------------------------------------\n * Node titles and highlighting\n *----------------------------------------------------------------------------*/\nspan.fancytree-node {\n  /* See #117 */\n  display: inherit;\n  width: 100%;\n  margin-top: 0px;\n  min-height: 20px;\n}\nspan.fancytree-title {\n  color: black;\n  cursor: pointer;\n  display: inline-block;\n  vertical-align: top;\n  min-height: 20px;\n  padding: 0 3px 0 3px;\n  margin: 0px 0 0 3px;\n  border: 1px solid transparent;\n  -webkit-border-radius: 0px;\n  -moz-border-radius: 0px;\n  -ms-border-radius: 0px;\n  -o-border-radius: 0px;\n  border-radius: 0px;\n}\nspan.fancytree-node.fancytree-error span.fancytree-title {\n  color: red;\n}\n/*------------------------------------------------------------------------------\n * Drag'n'drop support\n *----------------------------------------------------------------------------*/\n/* ext-dnd5: */\nspan.fancytree-childcounter {\n  color: #fff;\n  background: #337ab7;\n  border: 1px solid gray;\n  border-radius: 10px;\n  padding: 2px;\n  text-align: center;\n}\n/* ext-dnd: */\ndiv.fancytree-drag-helper span.fancytree-childcounter,\ndiv.fancytree-drag-helper span.fancytree-dnd-modifier {\n  display: inline-block;\n  color: #fff;\n  background: #337ab7;\n  border: 1px solid gray;\n  min-width: 10px;\n  height: 10px;\n  line-height: 1;\n  vertical-align: baseline;\n  border-radius: 10px;\n  padding: 2px;\n  text-align: center;\n  font-size: 9px;\n}\ndiv.fancytree-drag-helper span.fancytree-childcounter {\n  position: absolute;\n  top: -6px;\n  right: -6px;\n}\ndiv.fancytree-drag-helper span.fancytree-dnd-modifier {\n  background: #5cb85c;\n  border: none;\n  font-weight: bolder;\n}\ndiv.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img {\n  background-position: -32px -112px;\n}\ndiv.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img {\n  background-position: -16px -112px;\n}\n/*** Drop marker icon *********************************************************/\n#fancytree-drop-marker {\n  width: 32px;\n  position: absolute;\n  background-position: 0px -128px;\n  margin: 0;\n}\n#fancytree-drop-marker.fancytree-drop-after,\n#fancytree-drop-marker.fancytree-drop-before {\n  width: 64px;\n  background-position: 0px -144px;\n}\n#fancytree-drop-marker.fancytree-drop-copy {\n  background-position: -64px -128px;\n}\n#fancytree-drop-marker.fancytree-drop-move {\n  background-position: -32px -128px;\n}\n/*** Source node while dragging ***********************************************/\nspan.fancytree-drag-source.fancytree-drag-remove {\n  opacity: 0.15;\n}\n/*** Target node while dragging cursor is over it *****************************/\n/*------------------------------------------------------------------------------\n * 'rtl' option\n *----------------------------------------------------------------------------*/\n.fancytree-container.fancytree-rtl .fancytree-title {\n  /*unicode-bidi: bidi-override;*/\n  /* optional: reverse title letters */\n}\n.fancytree-container.fancytree-rtl span.fancytree-connector,\n.fancytree-container.fancytree-rtl span.fancytree-expander,\n.fancytree-container.fancytree-rtl span.fancytree-icon,\n.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img {\n  background-image: url(\"../skin-win8/icons-rtl.gif\");\n}\n.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,\n.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {\n  background-image: none;\n}\n.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,\n.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {\n  background-image: url(\"../skin-win8/icons-rtl.gif\");\n}\nul.fancytree-container.fancytree-rtl ul {\n  padding: 0 16px 0 0;\n}\nul.fancytree-container.fancytree-rtl.fancytree-connectors li {\n  background-position: right 0;\n  background-image: url(\"../skin-win8/vline-rtl.gif\");\n}\nul.fancytree-container.fancytree-rtl li.fancytree-lastsib,\nul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {\n  background-image: none;\n}\n#fancytree-drop-marker.fancytree-rtl {\n  background-image: url(\"../skin-win8/icons-rtl.gif\");\n}\n/*------------------------------------------------------------------------------\n * 'table' extension\n *----------------------------------------------------------------------------*/\ntable.fancytree-ext-table {\n  font-family: tahoma, arial, helvetica;\n  font-size: 10pt;\n  border-collapse: collapse;\n  /* ext-ariagrid */\n}\ntable.fancytree-ext-table span.fancytree-node {\n  display: inline-block;\n  box-sizing: border-box;\n}\ntable.fancytree-ext-table td.fancytree-status-merged {\n  text-align: center;\n  font-style: italic;\n  color: #c0c0c0;\n}\ntable.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged {\n  color: red;\n}\ntable.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr.fancytree-active > td {\n  background-color: #eee;\n}\ntable.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr > td.fancytree-active-cell {\n  background-color: #cbe8f6;\n}\ntable.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode > tbody > tr > td.fancytree-active-cell {\n  background-color: #3875d7;\n}\n/*------------------------------------------------------------------------------\n * 'columnview' extension\n *----------------------------------------------------------------------------*/\ntable.fancytree-ext-columnview tbody tr td {\n  position: relative;\n  border: 1px solid gray;\n  vertical-align: top;\n  overflow: auto;\n}\ntable.fancytree-ext-columnview tbody tr td > ul {\n  padding: 0;\n}\ntable.fancytree-ext-columnview tbody tr td > ul li {\n  list-style-image: none;\n  list-style-position: outside;\n  list-style-type: none;\n  -moz-background-clip: border;\n  -moz-background-inline-policy: continuous;\n  -moz-background-origin: padding;\n  background-attachment: scroll;\n  background-color: transparent;\n  background-position: 0px 0px;\n  background-repeat: repeat-y;\n  background-image: none;\n  /* no v-lines */\n  margin: 0;\n}\ntable.fancytree-ext-columnview span.fancytree-node {\n  position: relative;\n  /* allow positioning of embedded spans */\n  display: inline-block;\n}\ntable.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {\n  background-color: #e0e0e0;\n}\ntable.fancytree-ext-columnview span.fancytree-node.fancytree-active {\n  background-color: #cbe8f6;\n}\ntable.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {\n  position: absolute;\n  right: 3px;\n  background-position: 0px -80px;\n}\ntable.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover {\n  background-position: -16px -80px;\n}\n/*------------------------------------------------------------------------------\n * 'filter' extension\n *----------------------------------------------------------------------------*/\n.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {\n  color: #c0c0c0;\n  font-weight: lighter;\n}\n.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,\n.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {\n  color: black;\n  font-weight: normal;\n}\n.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,\n.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {\n  color: black;\n  font-weight: bold;\n}\n.fancytree-ext-filter-hide tr.fancytree-hide,\n.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {\n  display: none;\n}\n.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,\n.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {\n  color: #c0c0c0;\n  font-weight: lighter;\n}\n.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,\n.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {\n  color: black;\n  font-weight: normal;\n}\n/* Hide expanders if all child nodes are hidden by filter */\n.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,\n.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {\n  visibility: hidden;\n}\n.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,\n.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {\n  visibility: visible;\n}\n.fancytree-ext-childcounter span.fancytree-icon,\n.fancytree-ext-filter span.fancytree-icon,\n.fancytree-ext-childcounter span.fancytree-custom-icon,\n.fancytree-ext-filter span.fancytree-custom-icon {\n  position: relative;\n}\n.fancytree-ext-childcounter span.fancytree-childcounter,\n.fancytree-ext-filter span.fancytree-childcounter {\n  color: #fff;\n  background: #777;\n  border: 1px solid gray;\n  position: absolute;\n  top: -6px;\n  right: -6px;\n  min-width: 10px;\n  height: 10px;\n  line-height: 1;\n  vertical-align: baseline;\n  border-radius: 10px;\n  padding: 2px;\n  text-align: center;\n  font-size: 9px;\n}\n/*------------------------------------------------------------------------------\n * 'wide' extension\n *----------------------------------------------------------------------------*/\nul.fancytree-ext-wide {\n  position: relative;\n  min-width: 100%;\n  z-index: 2;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\nul.fancytree-ext-wide span.fancytree-node > span {\n  position: relative;\n  z-index: 2;\n}\nul.fancytree-ext-wide span.fancytree-node span.fancytree-title {\n  position: absolute;\n  z-index: 1;\n  left: 0px;\n  min-width: 100%;\n  margin-left: 0;\n  margin-right: 0;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n/*------------------------------------------------------------------------------\n * 'fixed' extension\n *----------------------------------------------------------------------------*/\n.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden {\n  display: none;\n}\n.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom {\n  border-bottom: 3px solid rgba(0, 0, 0, 0.75);\n}\n.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right {\n  border-right: 3px solid rgba(0, 0, 0, 0.75);\n}\n.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl {\n  position: absolute;\n  overflow: hidden;\n  z-index: 3;\n  top: 0px;\n  left: 0px;\n}\n.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr {\n  position: absolute;\n  overflow: hidden;\n  z-index: 2;\n  top: 0px;\n}\n.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl {\n  position: absolute;\n  overflow: hidden;\n  z-index: 2;\n  left: 0px;\n}\n.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br {\n  position: absolute;\n  overflow: scroll;\n  z-index: 1;\n}\n/*******************************************************************************\n * Styles specific to this skin.\n *\n * This section is automatically generated from the `ui-fancytree.less` template.\n ******************************************************************************/\n/*******************************************************************************\n * Node titles\n */\n.fancytree-plain span.fancytree-title {\n  border: 1px solid transparent;\n}\n.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-focused span.fancytree-title {\n  border-color: #3399ff;\n}\n.fancytree-plain span.fancytree-active span.fancytree-title,\n.fancytree-plain span.fancytree-selected span.fancytree-title {\n  background-color: #f7f7f7;\n  border-color: #dedede;\n}\n.fancytree-plain span.fancytree-node span.fancytree-selected span.fancytree-title {\n  font-style: italic;\n}\n.fancytree-plain span.fancytree-node:hover span.fancytree-title {\n  background-color: #eff9fe;\n  border-color: #70c0e7;\n}\n.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-active span.fancytree-title,\n.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-selected span.fancytree-title {\n  background-color: #cbe8f6;\n  border-color: #26a0da;\n}\n/*******************************************************************************\n * 'table' extension\n */\ntable.fancytree-ext-table tbody tr td {\n  border: 1px solid #EDEDED;\n}\ntable.fancytree-ext-table tbody span.fancytree-node,\ntable.fancytree-ext-table tbody span.fancytree-node:hover {\n  border: none;\n  background: none;\n}\ntable.fancytree-ext-table tbody tr:hover {\n  background-color: #E5F3FB;\n  outline: 1px solid #70C0E7;\n}\ntable.fancytree-ext-table tbody tr.fancytree-focused span.fancytree-title {\n  outline: 1px dotted black;\n}\ntable.fancytree-ext-table tbody tr.fancytree-active:hover,\ntable.fancytree-ext-table tbody tr.fancytree-selected:hover {\n  background-color: #CBE8F6;\n  outline: 1px solid #26A0DA;\n}\ntable.fancytree-ext-table tbody tr.fancytree-active {\n  background-color: #F7F7F7;\n  outline: 1px solid #DEDEDE;\n}\ntable.fancytree-ext-table tbody tr.fancytree-selected {\n  background-color: #F7F7F7;\n}\ntable.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active {\n  background-color: #CBE8F6;\n  outline: 1px solid #26A0DA;\n}\ntable.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected {\n  background-color: #CBE8F6;\n}\n", "$(document).ajaxError((event, xhr, options, exc) => {\n    handleAjaxError(xhr, exc)\n});\n\n$(document).on('ajax:error', (event) => {\n    const xhr = event.detail[2];\n    handleAjaxError(xhr, undefined)\n})\n\nexport function handleAjaxError(xhr, exc) {\n    function userAborted(xhr) {\n        return window.isPageBeingUnloaded || xhr.statusText == 'abort';\n    }\n\n    if (!userAborted(xhr)) {\n        var reasonTitle = xhr.getResponseHeader('ReasonTitle');\n        var reason = xhr.getResponseHeader('Reason');\n        switch (xhr.status) {\n            case 401:\n                if (reasonTitle && reason) {\n                    bootbox.alert({title: reasonTitle, message: reason});\n                } else {\n                    bootbox.alert('Sie sind nicht eingeloggt.');\n                }\n                break;\n            case 403:\n                if (reasonTitle && reason) {\n                    bootbox.alert({title: reasonTitle, message: reason});\n                } else {\n                    bootbox.alert('Keine Berechtigung f\u00FCr diese Aktion.');\n                }\n                break;\n            case 404:\n                if (reasonTitle && reason) {\n                    bootbox.alert({title: reasonTitle, message: reason});\n                } else {\n                    bootbox.alert('Dieses Objekt gibt es nicht.');\n                }\n                break;\n            default:\n                console.log(exc);\n                if (window._kurso_env !== \"production\") {\n                    var modalHeader = '<div class=\"modal-header\"><button class=\"close\" aria-label=\"Close\" data-dismiss=\"modal\" type=\"button\"><span aria-hidden=\"true\">\u00D7</span></button><h4 id=\"ModalLabel\" class=\"modal-title\">Fehler</h4></div>';\n                    createModalAndShow('error_modal', modalHeader + '<div class=\"modal-body\"><pre>' + xhr.responseText + '</pre></div>', null, null, true);\n                } else {\n                    bootbox.alert(\"Es ist ein Fehler aufgetreten. Das tut uns Leid.\");\n                }\n        }\n    }\n}\n\nwindow.isPageBeingUnloaded = false;\n\n$(window).on('beforeunload', function() {\n    window.isPageBeingUnloaded = true;\n});\n", "/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/javascript\nReleased under the MIT license\n */\n(function(global, factory) {\n  typeof exports === \"object\" && typeof module !== \"undefined\" ? module.exports = factory() : typeof define === \"function\" && define.amd ? define(factory) : (global = typeof globalThis !== \"undefined\" ? globalThis : global || self, \n  global.Rails = factory());\n})(this, (function() {\n  \"use strict\";\n  const linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\n  const buttonClickSelector = {\n    selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n    exclude: \"form button\"\n  };\n  const inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\n  const formSubmitSelector = \"form:not([data-turbo=true])\";\n  const formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\n  const formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\n  const formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\n  const fileInputSelector = \"input[name][type=file]:not([disabled])\";\n  const linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\n  const buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\n  let nonce = null;\n  const loadCSPNonce = () => {\n    const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n    return nonce = metaTag && metaTag.content;\n  };\n  const cspNonce = () => nonce || loadCSPNonce();\n  const m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n  const matches = function(element, selector) {\n    if (selector.exclude) {\n      return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n    } else {\n      return m.call(element, selector);\n    }\n  };\n  const EXPANDO = \"_ujsData\";\n  const getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;\n  const setData = function(element, key, value) {\n    if (!element[EXPANDO]) {\n      element[EXPANDO] = {};\n    }\n    return element[EXPANDO][key] = value;\n  };\n  const $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));\n  const isContentEditable = function(element) {\n    var isEditable = false;\n    do {\n      if (element.isContentEditable) {\n        isEditable = true;\n        break;\n      }\n      element = element.parentElement;\n    } while (element);\n    return isEditable;\n  };\n  const csrfToken = () => {\n    const meta = document.querySelector(\"meta[name=csrf-token]\");\n    return meta && meta.content;\n  };\n  const csrfParam = () => {\n    const meta = document.querySelector(\"meta[name=csrf-param]\");\n    return meta && meta.content;\n  };\n  const CSRFProtection = xhr => {\n    const token = csrfToken();\n    if (token) {\n      return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n    }\n  };\n  const refreshCSRFTokens = () => {\n    const token = csrfToken();\n    const param = csrfParam();\n    if (token && param) {\n      return $('form input[name=\"' + param + '\"]').forEach((input => input.value = token));\n    }\n  };\n  const AcceptHeaders = {\n    \"*\": \"*/*\",\n    text: \"text/plain\",\n    html: \"text/html\",\n    xml: \"application/xml, text/xml\",\n    json: \"application/json, text/javascript\",\n    script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n  };\n  const ajax = options => {\n    options = prepareOptions(options);\n    var xhr = createXHR(options, (function() {\n      const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n      if (Math.floor(xhr.status / 100) === 2) {\n        if (typeof options.success === \"function\") {\n          options.success(response, xhr.statusText, xhr);\n        }\n      } else {\n        if (typeof options.error === \"function\") {\n          options.error(response, xhr.statusText, xhr);\n        }\n      }\n      return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : undefined;\n    }));\n    if (options.beforeSend && !options.beforeSend(xhr, options)) {\n      return false;\n    }\n    if (xhr.readyState === XMLHttpRequest.OPENED) {\n      return xhr.send(options.data);\n    }\n  };\n  var prepareOptions = function(options) {\n    options.url = options.url || location.href;\n    options.type = options.type.toUpperCase();\n    if (options.type === \"GET\" && options.data) {\n      if (options.url.indexOf(\"?\") < 0) {\n        options.url += \"?\" + options.data;\n      } else {\n        options.url += \"&\" + options.data;\n      }\n    }\n    if (!(options.dataType in AcceptHeaders)) {\n      options.dataType = \"*\";\n    }\n    options.accept = AcceptHeaders[options.dataType];\n    if (options.dataType !== \"*\") {\n      options.accept += \", */*; q=0.01\";\n    }\n    return options;\n  };\n  var createXHR = function(options, done) {\n    const xhr = new XMLHttpRequest;\n    xhr.open(options.type, options.url, true);\n    xhr.setRequestHeader(\"Accept\", options.accept);\n    if (typeof options.data === \"string\") {\n      xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n    }\n    if (!options.crossDomain) {\n      xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      CSRFProtection(xhr);\n    }\n    xhr.withCredentials = !!options.withCredentials;\n    xhr.onreadystatechange = function() {\n      if (xhr.readyState === XMLHttpRequest.DONE) {\n        return done(xhr);\n      }\n    };\n    return xhr;\n  };\n  var processResponse = function(response, type) {\n    if (typeof response === \"string\" && typeof type === \"string\") {\n      if (type.match(/\\bjson\\b/)) {\n        try {\n          response = JSON.parse(response);\n        } catch (error) {}\n      } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n        const script = document.createElement(\"script\");\n        script.setAttribute(\"nonce\", cspNonce());\n        script.text = response;\n        document.head.appendChild(script).parentNode.removeChild(script);\n      } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n        const parser = new DOMParser;\n        type = type.replace(/;.+/, \"\");\n        try {\n          response = parser.parseFromString(response, type);\n        } catch (error1) {}\n      }\n    }\n    return response;\n  };\n  const href = element => element.href;\n  const isCrossDomain = function(url) {\n    const originAnchor = document.createElement(\"a\");\n    originAnchor.href = location.href;\n    const urlAnchor = document.createElement(\"a\");\n    try {\n      urlAnchor.href = url;\n      return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n    } catch (e) {\n      return true;\n    }\n  };\n  let preventDefault;\n  let {CustomEvent: CustomEvent} = window;\n  if (typeof CustomEvent !== \"function\") {\n    CustomEvent = function(event, params) {\n      const evt = document.createEvent(\"CustomEvent\");\n      evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n      return evt;\n    };\n    CustomEvent.prototype = window.Event.prototype;\n    ({preventDefault: preventDefault} = CustomEvent.prototype);\n    CustomEvent.prototype.preventDefault = function() {\n      const result = preventDefault.call(this);\n      if (this.cancelable && !this.defaultPrevented) {\n        Object.defineProperty(this, \"defaultPrevented\", {\n          get() {\n            return true;\n          }\n        });\n      }\n      return result;\n    };\n  }\n  const fire = (obj, name, data) => {\n    const event = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true,\n      detail: data\n    });\n    obj.dispatchEvent(event);\n    return !event.defaultPrevented;\n  };\n  const stopEverything = e => {\n    fire(e.target, \"ujs:everythingStopped\");\n    e.preventDefault();\n    e.stopPropagation();\n    e.stopImmediatePropagation();\n  };\n  const delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {\n    let {target: target} = e;\n    while (!!(target instanceof Element) && !matches(target, selector)) {\n      target = target.parentNode;\n    }\n    if (target instanceof Element && handler.call(target, e) === false) {\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }));\n  const toArray = e => Array.prototype.slice.call(e);\n  const serializeElement = (element, additionalParam) => {\n    let inputs = [ element ];\n    if (matches(element, \"form\")) {\n      inputs = toArray(element.elements);\n    }\n    const params = [];\n    inputs.forEach((function(input) {\n      if (!input.name || input.disabled) {\n        return;\n      }\n      if (matches(input, \"fieldset[disabled] *\")) {\n        return;\n      }\n      if (matches(input, \"select\")) {\n        toArray(input.options).forEach((function(option) {\n          if (option.selected) {\n            params.push({\n              name: input.name,\n              value: option.value\n            });\n          }\n        }));\n      } else if (input.checked || [ \"radio\", \"checkbox\", \"submit\" ].indexOf(input.type) === -1) {\n        params.push({\n          name: input.name,\n          value: input.value\n        });\n      }\n    }));\n    if (additionalParam) {\n      params.push(additionalParam);\n    }\n    return params.map((function(param) {\n      if (param.name) {\n        return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n      } else {\n        return param;\n      }\n    })).join(\"&\");\n  };\n  const formElements = (form, selector) => {\n    if (matches(form, \"form\")) {\n      return toArray(form.elements).filter((el => matches(el, selector)));\n    } else {\n      return toArray(form.querySelectorAll(selector));\n    }\n  };\n  const handleConfirmWithRails = rails => function(e) {\n    if (!allowAction(this, rails)) {\n      stopEverything(e);\n    }\n  };\n  const confirm = (message, element) => window.confirm(message);\n  var allowAction = function(element, rails) {\n    let callback;\n    const message = element.getAttribute(\"data-confirm\");\n    if (!message) {\n      return true;\n    }\n    let answer = false;\n    if (fire(element, \"confirm\")) {\n      try {\n        answer = rails.confirm(message, element);\n      } catch (error) {}\n      callback = fire(element, \"confirm:complete\", [ answer ]);\n    }\n    return answer && callback;\n  };\n  const handleDisabledElement = function(e) {\n    const element = this;\n    if (element.disabled) {\n      stopEverything(e);\n    }\n  };\n  const enableElement = e => {\n    let element;\n    if (e instanceof Event) {\n      if (isXhrRedirect(e)) {\n        return;\n      }\n      element = e.target;\n    } else {\n      element = e;\n    }\n    if (isContentEditable(element)) {\n      return;\n    }\n    if (matches(element, linkDisableSelector)) {\n      return enableLinkElement(element);\n    } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n      return enableFormElement(element);\n    } else if (matches(element, formSubmitSelector)) {\n      return enableFormElements(element);\n    }\n  };\n  const disableElement = e => {\n    const element = e instanceof Event ? e.target : e;\n    if (isContentEditable(element)) {\n      return;\n    }\n    if (matches(element, linkDisableSelector)) {\n      return disableLinkElement(element);\n    } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n      return disableFormElement(element);\n    } else if (matches(element, formSubmitSelector)) {\n      return disableFormElements(element);\n    }\n  };\n  var disableLinkElement = function(element) {\n    if (getData(element, \"ujs:disabled\")) {\n      return;\n    }\n    const replacement = element.getAttribute(\"data-disable-with\");\n    if (replacement != null) {\n      setData(element, \"ujs:enable-with\", element.innerHTML);\n      element.innerHTML = replacement;\n    }\n    element.addEventListener(\"click\", stopEverything);\n    return setData(element, \"ujs:disabled\", true);\n  };\n  var enableLinkElement = function(element) {\n    const originalText = getData(element, \"ujs:enable-with\");\n    if (originalText != null) {\n      element.innerHTML = originalText;\n      setData(element, \"ujs:enable-with\", null);\n    }\n    element.removeEventListener(\"click\", stopEverything);\n    return setData(element, \"ujs:disabled\", null);\n  };\n  var disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);\n  var disableFormElement = function(element) {\n    if (getData(element, \"ujs:disabled\")) {\n      return;\n    }\n    const replacement = element.getAttribute(\"data-disable-with\");\n    if (replacement != null) {\n      if (matches(element, \"button\")) {\n        setData(element, \"ujs:enable-with\", element.innerHTML);\n        element.innerHTML = replacement;\n      } else {\n        setData(element, \"ujs:enable-with\", element.value);\n        element.value = replacement;\n      }\n    }\n    element.disabled = true;\n    return setData(element, \"ujs:disabled\", true);\n  };\n  var enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));\n  var enableFormElement = function(element) {\n    const originalText = getData(element, \"ujs:enable-with\");\n    if (originalText != null) {\n      if (matches(element, \"button\")) {\n        element.innerHTML = originalText;\n      } else {\n        element.value = originalText;\n      }\n      setData(element, \"ujs:enable-with\", null);\n    }\n    element.disabled = false;\n    return setData(element, \"ujs:disabled\", null);\n  };\n  var isXhrRedirect = function(event) {\n    const xhr = event.detail ? event.detail[0] : undefined;\n    return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n  };\n  const handleMethodWithRails = rails => function(e) {\n    const link = this;\n    const method = link.getAttribute(\"data-method\");\n    if (!method) {\n      return;\n    }\n    if (isContentEditable(this)) {\n      return;\n    }\n    const href = rails.href(link);\n    const csrfToken$1 = csrfToken();\n    const csrfParam$1 = csrfParam();\n    const form = document.createElement(\"form\");\n    let formContent = `<input name='_method' value='${method}' type='hidden' />`;\n    if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {\n      formContent += `<input name='${csrfParam$1}' value='${csrfToken$1}' type='hidden' />`;\n    }\n    formContent += '<input type=\"submit\" />';\n    form.method = \"post\";\n    form.action = href;\n    form.target = link.target;\n    form.innerHTML = formContent;\n    form.style.display = \"none\";\n    document.body.appendChild(form);\n    form.querySelector('[type=\"submit\"]').click();\n    stopEverything(e);\n  };\n  const isRemote = function(element) {\n    const value = element.getAttribute(\"data-remote\");\n    return value != null && value !== \"false\";\n  };\n  const handleRemoteWithRails = rails => function(e) {\n    let data, method, url;\n    const element = this;\n    if (!isRemote(element)) {\n      return true;\n    }\n    if (!fire(element, \"ajax:before\")) {\n      fire(element, \"ajax:stopped\");\n      return false;\n    }\n    if (isContentEditable(element)) {\n      fire(element, \"ajax:stopped\");\n      return false;\n    }\n    const withCredentials = element.getAttribute(\"data-with-credentials\");\n    const dataType = element.getAttribute(\"data-type\") || \"script\";\n    if (matches(element, formSubmitSelector)) {\n      const button = getData(element, \"ujs:submit-button\");\n      method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n      url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n      if (method.toUpperCase() === \"GET\") {\n        url = url.replace(/\\?.*$/, \"\");\n      }\n      if (element.enctype === \"multipart/form-data\") {\n        data = new FormData(element);\n        if (button != null) {\n          data.append(button.name, button.value);\n        }\n      } else {\n        data = serializeElement(element, button);\n      }\n      setData(element, \"ujs:submit-button\", null);\n      setData(element, \"ujs:submit-button-formmethod\", null);\n      setData(element, \"ujs:submit-button-formaction\", null);\n    } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n      method = element.getAttribute(\"data-method\");\n      url = element.getAttribute(\"data-url\");\n      data = serializeElement(element, element.getAttribute(\"data-params\"));\n    } else {\n      method = element.getAttribute(\"data-method\");\n      url = rails.href(element);\n      data = element.getAttribute(\"data-params\");\n    }\n    ajax({\n      type: method || \"GET\",\n      url: url,\n      data: data,\n      dataType: dataType,\n      beforeSend(xhr, options) {\n        if (fire(element, \"ajax:beforeSend\", [ xhr, options ])) {\n          return fire(element, \"ajax:send\", [ xhr ]);\n        } else {\n          fire(element, \"ajax:stopped\");\n          return false;\n        }\n      },\n      success(...args) {\n        return fire(element, \"ajax:success\", args);\n      },\n      error(...args) {\n        return fire(element, \"ajax:error\", args);\n      },\n      complete(...args) {\n        return fire(element, \"ajax:complete\", args);\n      },\n      crossDomain: isCrossDomain(url),\n      withCredentials: withCredentials != null && withCredentials !== \"false\"\n    });\n    stopEverything(e);\n  };\n  const formSubmitButtonClick = function(e) {\n    const button = this;\n    const {form: form} = button;\n    if (!form) {\n      return;\n    }\n    if (button.name) {\n      setData(form, \"ujs:submit-button\", {\n        name: button.name,\n        value: button.value\n      });\n    }\n    setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n    setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n    return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n  };\n  const preventInsignificantClick = function(e) {\n    const link = this;\n    const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n    const data = link.getAttribute(\"data-params\");\n    const metaClick = e.metaKey || e.ctrlKey;\n    const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n    const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n    if (nonPrimaryMouseClick || insignificantMetaClick) {\n      e.stopImmediatePropagation();\n    }\n  };\n  const Rails = {\n    $: $,\n    ajax: ajax,\n    buttonClickSelector: buttonClickSelector,\n    buttonDisableSelector: buttonDisableSelector,\n    confirm: confirm,\n    cspNonce: cspNonce,\n    csrfToken: csrfToken,\n    csrfParam: csrfParam,\n    CSRFProtection: CSRFProtection,\n    delegate: delegate,\n    disableElement: disableElement,\n    enableElement: enableElement,\n    fileInputSelector: fileInputSelector,\n    fire: fire,\n    formElements: formElements,\n    formEnableSelector: formEnableSelector,\n    formDisableSelector: formDisableSelector,\n    formInputClickSelector: formInputClickSelector,\n    formSubmitButtonClick: formSubmitButtonClick,\n    formSubmitSelector: formSubmitSelector,\n    getData: getData,\n    handleDisabledElement: handleDisabledElement,\n    href: href,\n    inputChangeSelector: inputChangeSelector,\n    isCrossDomain: isCrossDomain,\n    linkClickSelector: linkClickSelector,\n    linkDisableSelector: linkDisableSelector,\n    loadCSPNonce: loadCSPNonce,\n    matches: matches,\n    preventInsignificantClick: preventInsignificantClick,\n    refreshCSRFTokens: refreshCSRFTokens,\n    serializeElement: serializeElement,\n    setData: setData,\n    stopEverything: stopEverything\n  };\n  const handleConfirm = handleConfirmWithRails(Rails);\n  Rails.handleConfirm = handleConfirm;\n  const handleMethod = handleMethodWithRails(Rails);\n  Rails.handleMethod = handleMethod;\n  const handleRemote = handleRemoteWithRails(Rails);\n  Rails.handleRemote = handleRemote;\n  const start = function() {\n    if (window._rails_loaded) {\n      throw new Error(\"rails-ujs has already been loaded!\");\n    }\n    window.addEventListener(\"pageshow\", (function() {\n      $(formEnableSelector).forEach((function(el) {\n        if (getData(el, \"ujs:disabled\")) {\n          enableElement(el);\n        }\n      }));\n      $(linkDisableSelector).forEach((function(el) {\n        if (getData(el, \"ujs:disabled\")) {\n          enableElement(el);\n        }\n      }));\n    }));\n    delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n    delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n    delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n    delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n    delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n    delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n    delegate(document, linkClickSelector, \"click\", handleConfirm);\n    delegate(document, linkClickSelector, \"click\", disableElement);\n    delegate(document, linkClickSelector, \"click\", handleRemote);\n    delegate(document, linkClickSelector, \"click\", handleMethod);\n    delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n    delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n    delegate(document, buttonClickSelector, \"click\", handleConfirm);\n    delegate(document, buttonClickSelector, \"click\", disableElement);\n    delegate(document, buttonClickSelector, \"click\", handleRemote);\n    delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n    delegate(document, inputChangeSelector, \"change\", handleConfirm);\n    delegate(document, inputChangeSelector, \"change\", handleRemote);\n    delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n    delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n    delegate(document, formSubmitSelector, \"submit\", handleRemote);\n    delegate(document, formSubmitSelector, \"submit\", (e => setTimeout((() => disableElement(e)), 13)));\n    delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n    delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n    delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n    delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n    delegate(document, formInputClickSelector, \"click\", handleConfirm);\n    delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n    document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n    document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n    return window._rails_loaded = true;\n  };\n  Rails.start = start;\n  if (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n    if (jQuery.rails) {\n      throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n    }\n    jQuery.rails = Rails;\n    jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {\n      if (!options.crossDomain) {\n        return CSRFProtection(xhr);\n      }\n    }));\n  }\n  if (typeof exports !== \"object\" && typeof module === \"undefined\") {\n    window.Rails = Rails;\n    if (fire(document, \"rails:attachBindings\")) {\n      start();\n    }\n  }\n  return Rails;\n}));\n", ".direct-upload {\n    display: inline-block;\n    position: relative;\n    padding: 2px 4px;\n    margin: 0 3px 3px 0;\n    border: 1px solid rgba(0, 0, 0, 0.3);\n    border-radius: 3px;\n    font-size: 11px;\n    line-height: 13px;\n}\n\n.direct-upload--pending {\n    opacity: 0.6;\n}\n\n.direct-upload__progress {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    opacity: 0.2;\n    background: #0076ff;\n    transition: width 120ms ease-out, opacity 60ms 60ms ease-in;\n    transform: translate3d(0, 0, 0);\n}\n\n.direct-upload--complete .direct-upload__progress {\n    opacity: 0.4;\n}\n\n.direct-upload--error {\n    border-color: red;\n}\n\ninput[type=file][data-direct-upload-url][disabled] {\n    display: none;\n}\n", "/* ========================================================================\n * Bootstrap: transition.js v3.3.6\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: alert.js v3.3.6\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.6'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: button.js v3.3.6\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.6'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target)\n      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"]') || $(e.target).is('input[type=\"checkbox\"]'))) e.preventDefault()\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: carousel.js v3.3.6\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.6'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: collapse.js v3.3.6\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.6'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: dropdown.js v3.3.6\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.6'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: modal.js v3.3.6\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.6'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: tooltip.js v3.3.6\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.6'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      that.$element\n        .removeAttr('aria-describedby')\n        .trigger('hidden.bs.' + that.type)\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: popover.js v3.3.6\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.6'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.6\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.6'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: tab.js v3.3.6\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.6'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: affix.js v3.3.6\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.6'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n", "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')", "/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n", "/** Bootstrap fix **/\n@media print {\n    .col-md-1,.col-md-2,.col-md-3,.col-md-4,\n    .col-md-5,.col-md-6,.col-md-7,.col-md-8,\n    .col-md-9,.col-md-10,.col-md-11,.col-md-12 {\n        float: left;\n    }\n\n    .col-md-1 {\n        width: 8%;\n    }\n    .col-md-2 {\n        width: 16%;\n    }\n    .col-md-3 {\n        width: 25%;\n    }\n    .col-md-4 {\n        width: 33%;\n    }\n    .col-md-5 {\n        width: 42%;\n    }\n    .col-md-6 {\n        width: 50%;\n    }\n    .col-md-7 {\n        width: 58%;\n    }\n    .col-md-8 {\n        width: 66%;\n    }\n    .col-md-9 {\n        width: 75%;\n    }\n    .col-md-10 {\n        width: 83%;\n    }\n    .col-md-11 {\n        width: 92%;\n    }\n    .col-md-12 {\n        width: 100%;\n    }\n}\n", "// drop up dropdowns at page bottom\n$(function() {\n\n\t$(document).on(\"shown.bs.dropdown\", \".dropdown\", function () {\n\t    // calculate the required sizes, spaces\n\t    var $ul = $(this).children(\".dropdown-menu\");\n\t    var $button = $(this).children(\".dropdown-toggle\");\n\t    var ulOffset = $ul.offset();\n\t    // how much space would be left on the top if the dropdown opened that direction\n\t    var spaceUp = (ulOffset.top - $button.height() - $ul.height()) - $(window).scrollTop();\n\t    // how much space is left at the bottom\n\t    var spaceDown = $(window).scrollTop() + $(window).height() - (ulOffset.top + $ul.height());\n\t    // switch to dropup only if there is no space at the bottom AND there is space at the top, or there isn't either but it would be still better fit\n\t    if (spaceDown < 0 && (spaceUp >= 0 || spaceUp > spaceDown))\n\t      $(this).addClass(\"dropup\");\n\t}).on(\"hidden.bs.dropdown\", \".dropdown\", function() {\n\t    // always reset after close\n\t    $(this).removeClass(\"dropup\");\n\t});\n\t\n});\n", "require('bootstrap');\nrequire('bootstrap/dist/css/bootstrap.css');\nrequire('./bootstrap_print.css')\nrequire('./auto-dropup')\n", "/*! AdminLTE app.js\n * ================\n * Main JS application file for AdminLTE v2. This file\n * should be included in all pages. It controls some layout\n * options and implements exclusive AdminLTE plugins.\n *\n * @Author  Almsaeed Studio\n * @Support <http://www.almsaeedstudio.com>\n * @Email   <support@almsaeedstudio.com>\n * @version 2.3.0\n * @license MIT <http://opensource.org/licenses/MIT>\n */\n\n//Make sure jQuery has been loaded before app.js\nif (typeof jQuery === \"undefined\") {\n  throw new Error(\"AdminLTE requires jQuery\");\n}\n\n/* AdminLTE\n *\n * @type Object\n * @description $.AdminLTE is the main object for the template's app.\n *              It's used for implementing functions and options related\n *              to the template. Keeping everything wrapped in an object\n *              prevents conflict with other plugins and is a better\n *              way to organize our code.\n */\n$.AdminLTE = {};\n\n/* --------------------\n * - AdminLTE Options -\n * --------------------\n * Modify these options to suit your implementation\n */\n$.AdminLTE.options = {\n  //Add slimscroll to navbar menus\n  //This requires you to load the slimscroll plugin\n  //in every page before app.js\n  navbarMenuSlimscroll: true,\n  navbarMenuSlimscrollWidth: \"3px\", //The width of the scroll bar\n  navbarMenuHeight: \"200px\", //The height of the inner menu\n  //General animation speed for JS animated elements such as box collapse/expand and\n  //sidebar treeview slide up/down. This options accepts an integer as milliseconds,\n  //'fast', 'normal', or 'slow'\n  animationSpeed: 150,\n  //Sidebar push menu toggle button selector\n  sidebarToggleSelector: \"[data-toggle='offcanvas']\",\n  //Activate sidebar push menu\n  sidebarPushMenu: true,\n  //Activate sidebar slimscroll if the fixed layout is set (requires SlimScroll Plugin)\n  sidebarSlimScroll: true,\n  //Enable sidebar expand on hover effect for sidebar mini\n  //This option is forced to true if both the fixed layout and sidebar mini\n  //are used together\n  sidebarExpandOnHover: false,\n  //BoxRefresh Plugin\n  enableBoxRefresh: true,\n  //Bootstrap.js tooltip\n  enableBSToppltip: true,\n  BSTooltipSelector: \"[data-toggle='tooltip']\",\n  //Enable Fast Click. Fastclick.js creates a more\n  //native touch experience with touch devices. If you\n  //choose to enable the plugin, make sure you load the script\n  //before AdminLTE's app.js\n  enableFastclick: true,\n  //Control Sidebar Options\n  enableControlSidebar: true,\n  controlSidebarOptions: {\n    //Which button should trigger the open/close event\n    toggleBtnSelector: \"[data-toggle='control-sidebar']\",\n    //The sidebar selector\n    selector: \".control-sidebar\",\n    //Enable slide over content\n    slide: true\n  },\n  //Box Widget Plugin. Enable this plugin\n  //to allow boxes to be collapsed and/or removed\n  enableBoxWidget: true,\n  //Box Widget plugin options\n  boxWidgetOptions: {\n    boxWidgetIcons: {\n      //Collapse icon\n      collapse: 'fa-minus',\n      //Open icon\n      open: 'fa-plus',\n      //Remove icon\n      remove: 'fa-times'\n    },\n    boxWidgetSelectors: {\n      //Remove button selector\n      remove: '[data-widget=\"remove\"]',\n      //Collapse button selector\n      collapse: '[data-widget=\"collapse\"]'\n    }\n  },\n  //Direct Chat plugin options\n  directChat: {\n    //Enable direct chat by default\n    enable: true,\n    //The button to open and close the chat contacts pane\n    contactToggleSelector: '[data-widget=\"chat-pane-toggle\"]'\n  },\n  //Define the set of colors to use globally around the website\n  colors: {\n    lightBlue: \"#3c8dbc\",\n    red: \"#f56954\",\n    green: \"#00a65a\",\n    aqua: \"#00c0ef\",\n    yellow: \"#f39c12\",\n    blue: \"#0073b7\",\n    navy: \"#001F3F\",\n    teal: \"#39CCCC\",\n    olive: \"#3D9970\",\n    lime: \"#01FF70\",\n    orange: \"#FF851B\",\n    fuchsia: \"#F012BE\",\n    purple: \"#8E24AA\",\n    maroon: \"#D81B60\",\n    black: \"#222222\",\n    gray: \"#d2d6de\"\n  },\n  //The standard screen sizes that bootstrap uses.\n  //If you change these in the variables.less file, change\n  //them here too.\n  screenSizes: {\n    xs: 480,\n    sm: 768,\n    md: 992,\n    lg: 1200\n  }\n};\n\n/* ------------------\n * - Implementation -\n * ------------------\n * The next block of code implements AdminLTE's\n * functions and plugins as specified by the\n * options above.\n */\n$(function () {\n  \"use strict\";\n\n  //Fix for IE page transitions\n  $(\"body\").removeClass(\"hold-transition\");\n\n  //Extend options if external options exist\n  if (typeof AdminLTEOptions !== \"undefined\") {\n    $.extend(true,\n            $.AdminLTE.options,\n            AdminLTEOptions);\n  }\n\n  //Easy access to options\n  var o = $.AdminLTE.options;\n\n  //Set up the object\n  _init();\n\n  //Activate the layout maker\n  $.AdminLTE.layout.activate();\n\n  //Enable sidebar tree view controls\n  $.AdminLTE.tree('.sidebar');\n\n  //Enable control sidebar\n  if (o.enableControlSidebar) {\n    $.AdminLTE.controlSidebar.activate();\n  }\n\n  //Add slimscroll to navbar dropdown\n  if (o.navbarMenuSlimscroll && typeof $.fn.slimscroll != 'undefined') {\n    $(\".navbar .menu\").slimscroll({\n      height: o.navbarMenuHeight,\n      alwaysVisible: false,\n      size: o.navbarMenuSlimscrollWidth\n    }).css(\"width\", \"100%\");\n  }\n\n  //Activate sidebar push menu\n  if (o.sidebarPushMenu) {\n    $.AdminLTE.pushMenu.activate(o.sidebarToggleSelector);\n  }\n\n  //Activate Bootstrap tooltip\n  if (o.enableBSToppltip) {\n    $('body').tooltip({\n      selector: o.BSTooltipSelector\n    });\n  }\n\n  //Activate box widget\n  if (o.enableBoxWidget) {\n    $.AdminLTE.boxWidget.activate();\n  }\n\n  //Activate fast click\n  if (o.enableFastclick && typeof FastClick != 'undefined') {\n    FastClick.attach(document.body);\n  }\n\n  //Activate direct chat widget\n  if (o.directChat.enable) {\n    $(document).on('click', o.directChat.contactToggleSelector, function () {\n      var box = $(this).parents('.direct-chat').first();\n      box.toggleClass('direct-chat-contacts-open');\n    });\n  }\n\n  /*\n   * INITIALIZE BUTTON TOGGLE\n   * ------------------------\n   */\n  $('.btn-group[data-toggle=\"btn-toggle\"]').each(function () {\n    var group = $(this);\n    $(this).find(\".btn\").on('click', function (e) {\n      group.find(\".btn.active\").removeClass(\"active\");\n      $(this).addClass(\"active\");\n      e.preventDefault();\n    });\n\n  });\n});\n\n/* ----------------------------------\n * - Initialize the AdminLTE Object -\n * ----------------------------------\n * All AdminLTE functions are implemented below.\n */\nfunction _init() {\n  'use strict';\n  /* Layout\n   * ======\n   * Fixes the layout height in case min-height fails.\n   *\n   * @type Object\n   * @usage $.AdminLTE.layout.activate()\n   *        $.AdminLTE.layout.fix()\n   *        $.AdminLTE.layout.fixSidebar()\n   */\n  $.AdminLTE.layout = {\n    activate: function () {\n      var _this = this;\n      _this.fix();\n      _this.fixSidebar();\n      $(window, \".wrapper\").resize(function () {\n        _this.fix();\n        _this.fixSidebar();\n      });\n    },\n    fix: function () {\n      //Get window height and the wrapper height\n      var neg = $('.main-header').outerHeight() + $('.main-footer').outerHeight();\n      var window_height = $(window).height();\n      var sidebar_height = $(\".sidebar\").height();\n      //Set the min-height of the content and sidebar based on the\n      //the height of the document.\n      if ($(\"body\").hasClass(\"fixed\")) {\n        $(\".content-wrapper, .right-side\").css('min-height', window_height - $('.main-footer').outerHeight());\n      } else {\n        var postSetWidth;\n        if (window_height >= sidebar_height) {\n          $(\".content-wrapper, .right-side\").css('min-height', window_height - neg);\n          postSetWidth = window_height - neg;\n        } else {\n          $(\".content-wrapper, .right-side\").css('min-height', sidebar_height);\n          postSetWidth = sidebar_height;\n        }\n\n        //Fix for the control sidebar height\n        var controlSidebar = $($.AdminLTE.options.controlSidebarOptions.selector);\n        if (typeof controlSidebar !== \"undefined\") {\n          if (controlSidebar.height() > postSetWidth)\n            $(\".content-wrapper, .right-side\").css('min-height', controlSidebar.height());\n        }\n\n      }\n    },\n    fixSidebar: function () {\n      //Make sure the body tag has the .fixed class\n      if (!$(\"body\").hasClass(\"fixed\")) {\n        if (typeof $.fn.slimScroll != 'undefined') {\n          $(\".sidebar\").slimScroll({destroy: true}).height(\"auto\");\n        }\n        return;\n      } else if (typeof $.fn.slimScroll == 'undefined' && window.console) {\n        window.console.error(\"Error: the fixed layout requires the slimscroll plugin!\");\n      }\n      //Enable slimscroll for fixed layout\n      if ($.AdminLTE.options.sidebarSlimScroll) {\n        if (typeof $.fn.slimScroll != 'undefined') {\n          var focusedElement = $(\"input:focus\", $(\".sidebar\"));\n          //Destroy if it exists\n          $(\".sidebar\").slimScroll({destroy: true}).height(\"auto\");\n          //Add slimscroll\n          $(\".sidebar\").slimscroll({\n            height: ($(window).height() - $(\".main-header\").height()) + \"px\",\n            color: \"rgba(0,0,0,0.2)\",\n            size: \"3px\"\n          });\n            //Refocus input if it exists after slimscroll init\n          // this is an ugly hack provided by an adminlte contributor. remove this, as soon as the search input field goes to the header bar.\n          if(focusedElement[0]) {\n            focusedElement.focus();\n          }\n        }\n      }\n    }\n  };\n\n  /* PushMenu()\n   * ==========\n   * Adds the push menu functionality to the sidebar.\n   *\n   * @type Function\n   * @usage: $.AdminLTE.pushMenu(\"[data-toggle='offcanvas']\")\n   */\n  $.AdminLTE.pushMenu = {\n    activate: function (toggleBtn) {\n      //Get the screen sizes\n      var screenSizes = $.AdminLTE.options.screenSizes;\n\n      //Enable sidebar toggle\n      $(toggleBtn).on('click', function (e) {\n        e.preventDefault();\n\n        //Enable sidebar push menu\n        if ($(window).width() > (screenSizes.sm - 1)) {\n          if ($(\"body\").hasClass('sidebar-collapse')) {\n            $(\"body\").removeClass('sidebar-collapse').trigger('expanded.pushMenu');\n          } else {\n            $(\"body\").addClass('sidebar-collapse').trigger('collapsed.pushMenu');\n          }\n        }\n        //Handle sidebar push menu for small screens\n        else {\n          if ($(\"body\").hasClass('sidebar-open')) {\n            $(\"body\").removeClass('sidebar-open').removeClass('sidebar-collapse').trigger('collapsed.pushMenu');\n          } else {\n            $(\"body\").addClass('sidebar-open').trigger('expanded.pushMenu');\n          }\n        }\n      });\n\n      $(\".content-wrapper\").click(function () {\n        //Enable hide menu when clicking on the content-wrapper on small screens\n        if ($(window).width() <= (screenSizes.sm - 1) && $(\"body\").hasClass(\"sidebar-open\")) {\n          $(\"body\").removeClass('sidebar-open');\n        }\n      });\n\n      //Enable expand on hover for sidebar mini\n      if ($.AdminLTE.options.sidebarExpandOnHover\n              || ($('body').hasClass('fixed')\n                      && $('body').hasClass('sidebar-mini'))) {\n        this.expandOnHover();\n      }\n    },\n    expandOnHover: function () {\n      var _this = this;\n      var screenWidth = $.AdminLTE.options.screenSizes.sm - 1;\n      //Expand sidebar on hover\n      $('.main-sidebar').hover(function () {\n        if ($('body').hasClass('sidebar-mini')\n                && $(\"body\").hasClass('sidebar-collapse')\n                && $(window).width() > screenWidth) {\n          _this.expand();\n        }\n      }, function () {\n        if ($('body').hasClass('sidebar-mini')\n                && $('body').hasClass('sidebar-expanded-on-hover')\n                && $(window).width() > screenWidth) {\n          _this.collapse();\n        }\n      });\n    },\n    expand: function () {\n      $(\"body\").removeClass('sidebar-collapse').addClass('sidebar-expanded-on-hover');\n    },\n    collapse: function () {\n      if ($('body').hasClass('sidebar-expanded-on-hover')) {\n        $('body').removeClass('sidebar-expanded-on-hover').addClass('sidebar-collapse');\n      }\n    }\n  };\n\n  /* Tree()\n   * ======\n   * Converts the sidebar into a multilevel\n   * tree view menu.\n   *\n   * @type Function\n   * @Usage: $.AdminLTE.tree('.sidebar')\n   */\n  $.AdminLTE.tree = function (menu) {\n    var _this = this;\n    var animationSpeed = $.AdminLTE.options.animationSpeed;\n    $(document).on('click', menu + ' li a', function (e) {\n      //Get the clicked link and the next element\n      var $this = $(this);\n      var checkElement = $this.next();\n\n      //Check if the next element is a menu and is visible\n      if ((checkElement.is('.treeview-menu')) && (checkElement.is(':visible'))) {\n        //Close the menu\n        checkElement.slideUp(animationSpeed, function () {\n          checkElement.removeClass('menu-open');\n          //Fix the layout in case the sidebar stretches over the height of the window\n          //_this.layout.fix();\n        });\n        checkElement.parent(\"li\").removeClass(\"active\");\n      }\n      //If the menu is not visible\n      else if ((checkElement.is('.treeview-menu')) && (!checkElement.is(':visible'))) {\n        //Get the parent menu\n        var parent = $this.parents('ul').first();\n        //Close all open menus within the parent\n        var ul = parent.find('ul:visible').slideUp(animationSpeed);\n        //Remove the menu-open class from the parent\n        ul.removeClass('menu-open');\n        //Get the parent li\n        var parent_li = $this.parent(\"li\");\n\n        //Open the target menu and add the menu-open class\n        checkElement.slideDown(animationSpeed, function () {\n          //Add the class active to the parent li\n          checkElement.addClass('menu-open');\n          parent.find('li.active').removeClass('active');\n          parent_li.addClass('active');\n          //Fix the layout in case the sidebar stretches over the height of the window\n          _this.layout.fix();\n        });\n      }\n      //if this isn't a link, prevent the page from being redirected\n      if (checkElement.is('.treeview-menu')) {\n        e.preventDefault();\n      }\n    });\n  };\n\n  /* ControlSidebar\n   * ==============\n   * Adds functionality to the right sidebar\n   *\n   * @type Object\n   * @usage $.AdminLTE.controlSidebar.activate(options)\n   */\n  $.AdminLTE.controlSidebar = {\n    //instantiate the object\n    activate: function () {\n      //Get the object\n      var _this = this;\n      //Update options\n      var o = $.AdminLTE.options.controlSidebarOptions;\n      //Get the sidebar\n      var sidebar = $(o.selector);\n      //The toggle button\n      var btn = $(o.toggleBtnSelector);\n\n      //Listen to the click event\n      btn.on('click', function (e) {\n        e.preventDefault();\n        //If the sidebar is not open\n        if (!sidebar.hasClass('control-sidebar-open')\n                && !$('body').hasClass('control-sidebar-open')) {\n          //Open the sidebar\n          _this.open(sidebar, o.slide);\n        } else {\n          _this.close(sidebar, o.slide);\n        }\n      });\n\n      //If the body has a boxed layout, fix the sidebar bg position\n      var bg = $(\".control-sidebar-bg\");\n      _this._fix(bg);\n\n      //If the body has a fixed layout, make the control sidebar fixed\n      if ($('body').hasClass('fixed')) {\n        _this._fixForFixed(sidebar);\n      } else {\n        //If the content height is less than the sidebar's height, force max height\n        if ($('.content-wrapper, .right-side').height() < sidebar.height()) {\n          _this._fixForContent(sidebar);\n        }\n      }\n    },\n    //Open the control sidebar\n    open: function (sidebar, slide) {\n      //Slide over content\n      if (slide) {\n        sidebar.addClass('control-sidebar-open');\n      } else {\n        //Push the content by adding the open class to the body instead\n        //of the sidebar itself\n        $('body').addClass('control-sidebar-open');\n      }\n    },\n    //Close the control sidebar\n    close: function (sidebar, slide) {\n      if (slide) {\n        sidebar.removeClass('control-sidebar-open');\n      } else {\n        $('body').removeClass('control-sidebar-open');\n      }\n    },\n    _fix: function (sidebar) {\n      var _this = this;\n      if ($(\"body\").hasClass('layout-boxed')) {\n        sidebar.css('position', 'absolute');\n        sidebar.height($(\".wrapper\").height());\n        $(window).resize(function () {\n          _this._fix(sidebar);\n        });\n      } else {\n        sidebar.css({\n          'position': 'fixed',\n          'height': 'auto'\n        });\n      }\n    },\n    _fixForFixed: function (sidebar) {\n      sidebar.css({\n        'position': 'fixed',\n        'max-height': '100%',\n        'overflow': 'auto',\n        'padding-bottom': '50px'\n      });\n    },\n    _fixForContent: function (sidebar) {\n      $(\".content-wrapper, .right-side\").css('min-height', sidebar.height());\n    }\n  };\n\n  /* BoxWidget\n   * =========\n   * BoxWidget is a plugin to handle collapsing and\n   * removing boxes from the screen.\n   *\n   * @type Object\n   * @usage $.AdminLTE.boxWidget.activate()\n   *        Set all your options in the main $.AdminLTE.options object\n   */\n  $.AdminLTE.boxWidget = {\n    selectors: $.AdminLTE.options.boxWidgetOptions.boxWidgetSelectors,\n    icons: $.AdminLTE.options.boxWidgetOptions.boxWidgetIcons,\n    animationSpeed: $.AdminLTE.options.animationSpeed,\n    activate: function (_box) {\n      var _this = this;\n      if (!_box) {\n        _box = document; // activate all boxes per default\n      }\n      //Listen for collapse event triggers\n      $(_box).on('click', _this.selectors.collapse, function (e) {\n        e.preventDefault();\n        _this.collapse($(this));\n      });\n\n      //Listen for remove event triggers\n      $(_box).on('click', _this.selectors.remove, function (e) {\n        e.preventDefault();\n        _this.remove($(this));\n      });\n    },\n    collapse: function (element) {\n      var _this = this;\n      //Find the box parent\n      var box = element.parents(\".box\").first();\n      //Find the body and the footer\n      var box_content = box.find(\"> .box-body, > .box-footer, > form  >.box-body, > form > .box-footer\");\n      if (!box.hasClass(\"collapsed-box\")) {\n        //Convert minus into plus\n        element.children(\":first\")\n                .removeClass(_this.icons.collapse)\n                .addClass(_this.icons.open);\n        //Hide the content\n        box_content.slideUp(_this.animationSpeed, function () {\n          box.addClass(\"collapsed-box\");\n        });\n      } else {\n        //Convert plus into minus\n        element.children(\":first\")\n                .removeClass(_this.icons.open)\n                .addClass(_this.icons.collapse);\n        //Show the content\n        box_content.slideDown(_this.animationSpeed, function () {\n          box.removeClass(\"collapsed-box\");\n        });\n      }\n    },\n    remove: function (element) {\n      //Find the box parent\n      var box = element.parents(\".box\").first();\n      box.slideUp(this.animationSpeed);\n    }\n  };\n}\n\n/* ------------------\n * - Custom Plugins -\n * ------------------\n * All custom plugins are defined below.\n */\n\n/*\n * BOX REFRESH BUTTON\n * ------------------\n * This is a custom plugin to use with the component BOX. It allows you to add\n * a refresh button to the box. It converts the box's state to a loading state.\n *\n * @type plugin\n * @usage $(\"#box-widget\").boxRefresh( options );\n */\n(function ($) {\n\n  \"use strict\";\n\n  $.fn.boxRefresh = function (options) {\n\n    // Render options\n    var settings = $.extend({\n      //Refresh button selector\n      trigger: \".refresh-btn\",\n      //File source to be loaded (e.g: ajax/src.php)\n      source: \"\",\n      //Callbacks\n      onLoadStart: function (box) {\n        return box;\n      }, //Right after the button has been clicked\n      onLoadDone: function (box) {\n        return box;\n      } //When the source has been loaded\n\n    }, options);\n\n    //The overlay\n    var overlay = $('<div class=\"overlay\"><div class=\"fa fa-refresh fa-spin\"></div></div>');\n\n    return this.each(function () {\n      //if a source is specified\n      if (settings.source === \"\") {\n        if (window.console) {\n          window.console.log(\"Please specify a source first - boxRefresh()\");\n        }\n        return;\n      }\n      //the box\n      var box = $(this);\n      //the button\n      var rBtn = box.find(settings.trigger).first();\n\n      //On trigger click\n      rBtn.on('click', function (e) {\n        e.preventDefault();\n        //Add loading overlay\n        start(box);\n\n        //Perform ajax call\n        box.find(\".box-body\").load(settings.source, function () {\n          done(box);\n        });\n      });\n    });\n\n    function start(box) {\n      //Add overlay and loading img\n      box.append(overlay);\n\n      settings.onLoadStart.call(box);\n    }\n\n    function done(box) {\n      //Remove overlay and loading img\n      box.find(overlay).remove();\n\n      settings.onLoadDone.call(box);\n    }\n\n  };\n\n})(jQuery);\n\n/*\n * EXPLICIT BOX ACTIVATION\n * -----------------------\n * This is a custom plugin to use with the component BOX. It allows you to activate\n * a box inserted in the DOM after the app.js was loaded.\n *\n * @type plugin\n * @usage $(\"#box-widget\").activateBox();\n */\n(function ($) {\n\n  'use strict';\n\n  $.fn.activateBox = function () {\n    $.AdminLTE.boxWidget.activate(this);\n  };\n\n})(jQuery);\n\n/*\n * TODO LIST CUSTOM PLUGIN\n * -----------------------\n * This plugin depends on iCheck plugin for checkbox and radio inputs\n *\n * @type plugin\n * @usage $(\"#todo-widget\").todolist( options );\n */\n(function ($) {\n\n  'use strict';\n\n  $.fn.todolist = function (options) {\n    // Render options\n    var settings = $.extend({\n      //When the user checks the input\n      onCheck: function (ele) {\n        return ele;\n      },\n      //When the user unchecks the input\n      onUncheck: function (ele) {\n        return ele;\n      }\n    }, options);\n\n    return this.each(function () {\n\n      if (typeof $.fn.iCheck != 'undefined') {\n        $('input', this).on('ifChecked', function () {\n          var ele = $(this).parents(\"li\").first();\n          ele.toggleClass(\"done\");\n          settings.onCheck.call(ele);\n        });\n\n        $('input', this).on('ifUnchecked', function () {\n          var ele = $(this).parents(\"li\").first();\n          ele.toggleClass(\"done\");\n          settings.onUncheck.call(ele);\n        });\n      } else {\n        $('input', this).on('change', function () {\n          var ele = $(this).parents(\"li\").first();\n          ele.toggleClass(\"done\");\n          if ($('input', ele).is(\":checked\")) {\n            settings.onCheck.call(ele);\n          } else {\n            settings.onUncheck.call(ele);\n          }\n        });\n      }\n    });\n  };\n}(jQuery));\n", "/*!\n *   AdminLTE v2.3.3\n *   Author: Almsaeed Studio\n *\t Website: Almsaeed Studio <http://almsaeedstudio.com>\n *   License: Open source - MIT\n *           Please visit http://opensource.org/licenses/MIT for more information\n!*/\n/*\n * Core: General Layout Style\n * -------------------------\n */\nhtml,\nbody {\n  min-height: 100%;\n}\n.layout-boxed html,\n.layout-boxed body {\n  height: 100%;\n}\nbody {\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-weight: 400;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n/* Layout */\n.wrapper {\n  min-height: 100%;\n  position: relative;\n  overflow: hidden;\n}\n.wrapper:before,\n.wrapper:after {\n  content: \" \";\n  display: table;\n}\n.wrapper:after {\n  clear: both;\n}\n.layout-boxed .wrapper {\n  max-width: 1250px;\n  margin: 0 auto;\n  min-height: 100%;\n  box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);\n  position: relative;\n}\n.layout-boxed {\n  /*background: url('../img/boxed-bg.jpg') repeat fixed;*/\n}\n/*\n * Content Wrapper - contains the main content\n * ```.right-side has been deprecated as of v2.0.0 in favor of .content-wrapper  ```\n */\n.content-wrapper,\n.right-side,\n.main-footer {\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  margin-left: 230px;\n  z-index: 820;\n}\n.layout-top-nav .content-wrapper,\n.layout-top-nav .right-side,\n.layout-top-nav .main-footer {\n  margin-left: 0;\n}\n@media (max-width: 767px) {\n  .content-wrapper,\n  .right-side,\n  .main-footer {\n    margin-left: 0;\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .content-wrapper,\n  .sidebar-collapse .right-side,\n  .sidebar-collapse .main-footer {\n    margin-left: 0;\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .content-wrapper,\n  .sidebar-open .right-side,\n  .sidebar-open .main-footer {\n    -webkit-transform: translate(230px, 0);\n    -ms-transform: translate(230px, 0);\n    -o-transform: translate(230px, 0);\n    transform: translate(230px, 0);\n  }\n}\n.content-wrapper,\n.right-side {\n  min-height: 100%;\n  background-color: #ecf0f5;\n  z-index: 800;\n}\n.main-footer {\n  background: #fff;\n  padding: 15px;\n  color: #444;\n  border-top: 1px solid #d2d6de;\n}\n/* Fixed layout */\n.fixed .main-header,\n.fixed .main-sidebar,\n.fixed .left-side {\n  position: fixed;\n}\n.fixed .main-header {\n  top: 0;\n  right: 0;\n  left: 0;\n}\n.fixed .content-wrapper,\n.fixed .right-side {\n  padding-top: 50px;\n}\n@media (max-width: 767px) {\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 50px;\n  }\n}\n.fixed.layout-boxed .wrapper {\n  max-width: 100%;\n}\nbody.hold-transition .content-wrapper,\nbody.hold-transition .right-side,\nbody.hold-transition .main-footer,\nbody.hold-transition .main-sidebar,\nbody.hold-transition .left-side,\nbody.hold-transition .main-header > .navbar,\nbody.hold-transition .main-header .logo {\n  /* Fix for IE */\n  -webkit-transition: none;\n  -o-transition: none;\n  transition: none;\n}\n/* Content */\n.content {\n  min-height: 250px;\n  padding: 15px;\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n/* H1 - H6 font */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: 'Source Sans Pro', sans-serif;\n}\n/* General Links */\na {\n  color: #008199;\n}\na:hover,\na:active,\na:focus {\n  outline: none;\n  text-decoration: none;\n  color: #00c1e5;\n}\n/* Page Header */\n.page-header {\n  margin: 10px 0 20px 0;\n  font-size: 22px;\n}\n.page-header > small {\n  color: #666;\n  display: block;\n  margin-top: 5px;\n}\n/*\n * Component: Main Header\n * ----------------------\n */\n.main-header {\n  position: relative;\n  max-height: 100px;\n  z-index: 1030;\n}\n.main-header > .navbar {\n  -webkit-transition: margin-left 0.3s ease-in-out;\n  -o-transition: margin-left 0.3s ease-in-out;\n  transition: margin-left 0.3s ease-in-out;\n  margin-bottom: 0;\n  margin-left: 230px;\n  border: none;\n  min-height: 50px;\n  border-radius: 0;\n}\n.layout-top-nav .main-header > .navbar {\n  margin-left: 0;\n}\n.main-header #navbar-search-input.form-control {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: transparent;\n}\n.main-header #navbar-search-input.form-control:focus,\n.main-header #navbar-search-input.form-control:active {\n  border-color: rgba(0, 0, 0, 0.1);\n  background: rgba(255, 255, 255, 0.9);\n}\n.main-header #navbar-search-input.form-control::-moz-placeholder {\n  color: #ccc;\n  opacity: 1;\n}\n.main-header #navbar-search-input.form-control:-ms-input-placeholder {\n  color: #ccc;\n}\n.main-header #navbar-search-input.form-control::-webkit-input-placeholder {\n  color: #ccc;\n}\n.main-header .navbar-custom-menu,\n.main-header .navbar-right {\n  float: right;\n}\n@media (max-width: 991px) {\n  .main-header .navbar-custom-menu a,\n  .main-header .navbar-right a {\n    color: inherit;\n    background: transparent;\n  }\n}\n@media (max-width: 767px) {\n  .main-header .navbar-right {\n    float: none;\n  }\n  .navbar-collapse .main-header .navbar-right {\n    margin: 7.5px -15px;\n  }\n  .main-header .navbar-right > li {\n    color: inherit;\n    border: 0;\n  }\n}\n.main-header .sidebar-toggle {\n  float: left;\n  background-color: transparent;\n  background-image: none;\n  padding: 15px 15px;\n  font-family: fontAwesome;\n}\n.main-header .sidebar-toggle:before {\n  content: \"\\f0c9\";\n}\n.main-header .sidebar-toggle:hover {\n  color: #fff;\n}\n.main-header .sidebar-toggle:focus,\n.main-header .sidebar-toggle:active {\n  background: transparent;\n}\n.main-header .sidebar-toggle .icon-bar {\n  display: none;\n}\n.main-header .navbar .nav > li.user > a > .fa,\n.main-header .navbar .nav > li.user > a > .glyphicon,\n.main-header .navbar .nav > li.user > a > .ion {\n  margin-right: 5px;\n}\n.main-header .navbar .nav > li > a > .label {\n  position: absolute;\n  top: 9px;\n  right: 7px;\n  text-align: center;\n  font-size: 9px;\n  padding: 2px 3px;\n  line-height: .9;\n}\n.main-header .logo {\n  -webkit-transition: width 0.3s ease-in-out;\n  -o-transition: width 0.3s ease-in-out;\n  transition: width 0.3s ease-in-out;\n  display: block;\n  float: left;\n  height: 50px;\n  font-size: 20px;\n  line-height: 50px;\n  text-align: center;\n  width: 230px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  padding: 0 15px;\n  font-weight: 300;\n  overflow: hidden;\n}\n.main-header .logo .logo-lg {\n  display: block;\n}\n.main-header .logo .logo-mini {\n  display: none;\n}\n.main-header .navbar-brand {\n  color: #fff;\n}\n.content-header {\n  position: relative;\n  padding: 15px 15px 0 15px;\n}\n.content-header > h1 {\n  margin: 0;\n}\n.content-header-fixed {\n  position: fixed;\n  background-color: #ffffff;\n  margin-left: 230px;\n  left: 0;\n  right: 0;\n  padding: 15px 15px 0 15px;\n  transition: transform 0.3s ease-in-out 0s, margin 0.3s ease-in-out 0s;\n  z-index: 800;\n}\n.content-header-fixed .nav-tabs {\n  margin-top: 15px;\n}\n.content-header-fixed .nav-tabs > li > a {\n  border: none;\n}\n.content-header-fixed ul {\n  border: none;\n}\n.content-header-fixed .nav-tabs > li.active > a {\n  border-bottom: 3px solid #008199;\n  background-color: inherit;\n  margin-bottom: -3px;\n}\n.content-header-fixed .nav-tabs > li > a:hover {\n  border-left: none;\n  border-right: none;\n  border-top: none;\n  background-color: #f5f5f5;\n}\n.content-header-fixed > h1 {\n  margin: 0 0 15px 0;\n}\n.content-header-fixed > h1,\n.content-header > h1 {\n  font-size: 24px;\n}\n.content-header-fixed > h1 > small,\n.content-header > h1 > small {\n  font-size: 15px;\n  display: inline-block;\n  padding-left: 4px;\n  font-weight: 300;\n}\n.content-header-fixed > .breadcrumb,\n.content-header > .breadcrumb {\n  float: right;\n  background: transparent;\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 12px;\n  padding: 7px 5px;\n  position: absolute;\n  top: 15px;\n  right: 10px;\n  border-radius: 2px;\n}\n.content-header-fixed > .breadcrumb > li > a,\n.content-header > .breadcrumb > li > a {\n  color: #444;\n  text-decoration: none;\n  display: inline-block;\n}\n.content-header-fixed > .breadcrumb > li > a > .fa,\n.content-header > .breadcrumb > li > a > .fa,\n.content-header-fixed > .breadcrumb > li > a > .glyphicon,\n.content-header > .breadcrumb > li > a > .glyphicon,\n.content-header-fixed > .breadcrumb > li > a > .ion,\n.content-header > .breadcrumb > li > a > .ion {\n  margin-right: 5px;\n}\n.content-header-fixed > .breadcrumb > li + li:before,\n.content-header > .breadcrumb > li + li:before {\n  content: '>\\00a0';\n}\n@media (max-width: 991px) {\n  .content-header-fixed > .breadcrumb,\n  .content-header > .breadcrumb {\n    position: relative;\n    margin-top: 5px;\n    top: 0;\n    right: 0;\n    float: none;\n    background: #d2d6de;\n    padding-left: 10px;\n  }\n  .content-header-fixed > .breadcrumb li:before,\n  .content-header > .breadcrumb li:before {\n    color: #97a0b3;\n  }\n}\n.navbar-toggle {\n  color: #fff;\n  border: 0;\n  margin: 0;\n  padding: 15px 15px;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu .navbar-nav > li {\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav {\n    margin: 0;\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n    line-height: 20px;\n  }\n}\n@media (max-width: 767px) {\n  .main-header {\n    position: relative;\n  }\n  .main-header .logo,\n  .main-header .navbar {\n    width: 100%;\n    float: none;\n  }\n  .main-header .navbar {\n    margin: 0;\n  }\n  .main-header .navbar-custom-menu {\n    float: right;\n  }\n}\n@media (max-width: 991px) {\n  .navbar-collapse.pull-left {\n    float: none !important;\n  }\n  .navbar-collapse.pull-left + .navbar-custom-menu {\n    display: block;\n    position: absolute;\n    top: 0;\n    right: 40px;\n  }\n}\n/*\n * Component: Sidebar\n * ------------------\n */\n.main-sidebar,\n.left-side {\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding-top: 50px;\n  min-height: 100%;\n  width: 230px;\n  z-index: 810;\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;\n}\n@media (max-width: 767px) {\n  .main-sidebar,\n  .left-side {\n    padding-top: 100px;\n  }\n}\n@media (max-width: 767px) {\n  .main-sidebar,\n  .left-side {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .main-sidebar,\n  .sidebar-collapse .left-side {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .main-sidebar,\n  .sidebar-open .left-side {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n  }\n}\n.sidebar {\n  padding-bottom: 10px;\n}\n.sidebar-form input:focus {\n  border-color: transparent;\n}\n.user-panel {\n  position: relative;\n  width: 100%;\n  padding: 10px;\n  overflow: hidden;\n}\n.user-panel:before,\n.user-panel:after {\n  content: \" \";\n  display: table;\n}\n.user-panel:after {\n  clear: both;\n}\n.user-panel > .image > img {\n  width: 100%;\n  max-width: 45px;\n  height: auto;\n}\n.user-panel > .info {\n  padding: 5px 5px 5px 15px;\n  line-height: 1;\n  position: absolute;\n  left: 55px;\n}\n.user-panel > .info > p {\n  font-weight: 600;\n  margin-bottom: 9px;\n}\n.user-panel > .info > a {\n  text-decoration: none;\n  padding-right: 5px;\n  margin-top: 3px;\n  font-size: 11px;\n}\n.user-panel > .info > a > .fa,\n.user-panel > .info > a > .ion,\n.user-panel > .info > a > .glyphicon {\n  margin-right: 3px;\n}\n.sidebar-menu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li {\n  position: relative;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li > a {\n  padding: 12px 5px 12px 15px;\n  display: block;\n}\n.sidebar-menu > li > a > .fa,\n.sidebar-menu > li > a > .glyphicon,\n.sidebar-menu > li > a > .ion {\n  width: 20px;\n}\n.sidebar-menu > li .label,\n.sidebar-menu > li .badge {\n  margin-top: 3px;\n  margin-right: 5px;\n}\n.sidebar-menu li.header {\n  padding: 10px 25px 10px 15px;\n  font-size: 12px;\n}\n.sidebar-menu li > a > .fa-angle-left {\n  width: auto;\n  height: auto;\n  padding: 0;\n  margin-right: 10px;\n  margin-top: 3px;\n}\n.sidebar-menu li.active > a > .fa-angle-left {\n  -webkit-transform: rotate(-90deg);\n  -ms-transform: rotate(-90deg);\n  -o-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n.sidebar-menu li.active > .treeview-menu {\n  display: block;\n}\n.sidebar-menu .treeview-menu {\n  display: none;\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  padding-left: 5px;\n}\n.sidebar-menu .treeview-menu .treeview-menu {\n  padding-left: 20px;\n}\n.sidebar-menu .treeview-menu > li {\n  margin: 0;\n}\n.sidebar-menu .treeview-menu > li > a {\n  padding: 5px 5px 5px 15px;\n  display: block;\n  font-size: 14px;\n}\n.sidebar-menu .treeview-menu > li > a > .fa,\n.sidebar-menu .treeview-menu > li > a > .glyphicon,\n.sidebar-menu .treeview-menu > li > a > .ion {\n  width: 20px;\n}\n.sidebar-menu .treeview-menu > li > a > .fa-angle-left,\n.sidebar-menu .treeview-menu > li > a > .fa-angle-down {\n  width: auto;\n}\n/*\n * Component: Sidebar Mini\n */\n@media (min-width: 768px) {\n  .sidebar-mini.sidebar-collapse .content-wrapper,\n  .sidebar-mini.sidebar-collapse .right-side,\n  .sidebar-mini.sidebar-collapse .main-footer {\n    margin-left: 50px !important;\n    z-index: 840;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n    width: 40px !important;\n    z-index: 850;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li {\n    position: relative;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a {\n    margin-right: 0;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span {\n    border-top-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span {\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    padding-top: 5px;\n    padding-bottom: 5px;\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right),\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n    display: block !important;\n    position: absolute;\n    width: 180px;\n    left: 50px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span {\n    top: 0;\n    margin-left: -3px;\n    padding: 12px 5px 12px 20px;\n    background-color: inherit;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n    top: 44px;\n    margin-left: 0;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info,\n  .sidebar-mini.sidebar-collapse .sidebar-form,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right,\n  .sidebar-mini.sidebar-collapse .sidebar-menu li.header {\n    display: none !important;\n    -webkit-transform: translateZ(0);\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo {\n    width: 50px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini {\n    display: block;\n    margin-left: -15px;\n    margin-right: -15px;\n    font-size: 18px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg {\n    display: none;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .navbar {\n    margin-left: 50px;\n  }\n}\n.sidebar-menu,\n.main-sidebar .user-panel,\n.sidebar-menu > li.header {\n  white-space: nowrap;\n  overflow: hidden;\n}\n.sidebar-menu:hover {\n  overflow: visible;\n}\n.sidebar-form,\n.sidebar-menu > li.header {\n  overflow: hidden;\n  text-overflow: clip;\n}\n.sidebar-menu li > a {\n  position: relative;\n}\n.sidebar-menu li > a > .pull-right {\n  position: absolute;\n  right: 10px;\n  top: 50%;\n  margin-top: -7px;\n}\n/*\n * Component: Control sidebar. By default, this is the right sidebar.\n */\n.control-sidebar-bg {\n  position: fixed;\n  z-index: 1000;\n  bottom: 0;\n}\n.control-sidebar-bg,\n.control-sidebar {\n  top: 0;\n  right: -230px;\n  width: 230px;\n  -webkit-transition: right 0.3s ease-in-out;\n  -o-transition: right 0.3s ease-in-out;\n  transition: right 0.3s ease-in-out;\n}\n.control-sidebar {\n  position: absolute;\n  padding-top: 50px;\n  z-index: 1010;\n}\n@media (max-width: 768px) {\n  .control-sidebar {\n    padding-top: 100px;\n  }\n}\n.control-sidebar > .tab-content {\n  padding: 10px 15px;\n}\n.control-sidebar.control-sidebar-open,\n.control-sidebar.control-sidebar-open + .control-sidebar-bg {\n  right: 0;\n}\n.control-sidebar-open .control-sidebar-bg,\n.control-sidebar-open .control-sidebar {\n  right: 0;\n}\n@media (min-width: 768px) {\n  .control-sidebar-open .content-wrapper,\n  .control-sidebar-open .right-side,\n  .control-sidebar-open .main-footer {\n    margin-right: 230px;\n  }\n}\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus {\n  border-left-width: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a {\n  border-radius: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a,\n.nav-tabs.control-sidebar-tabs > li > a:hover {\n  border-top: none;\n  border-right: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n}\n.nav-tabs.control-sidebar-tabs > li > a .icon {\n  font-size: 16px;\n}\n.nav-tabs.control-sidebar-tabs > li.active > a,\n.nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.nav-tabs.control-sidebar-tabs > li.active > a:active {\n  border-top: none;\n  border-right: none;\n  border-bottom: none;\n}\n@media (max-width: 768px) {\n  .nav-tabs.control-sidebar-tabs {\n    display: table;\n  }\n  .nav-tabs.control-sidebar-tabs > li {\n    display: table-cell;\n  }\n}\n.control-sidebar-heading {\n  font-weight: 400;\n  font-size: 16px;\n  padding: 10px 0;\n  margin-bottom: 10px;\n}\n.control-sidebar-subheading {\n  display: block;\n  font-weight: 400;\n  font-size: 14px;\n}\n.control-sidebar-menu {\n  list-style: none;\n  padding: 0;\n  margin: 0 -15px;\n}\n.control-sidebar-menu > li > a {\n  display: block;\n  padding: 10px 15px;\n}\n.control-sidebar-menu > li > a:before,\n.control-sidebar-menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.control-sidebar-menu > li > a:after {\n  clear: both;\n}\n.control-sidebar-menu > li > a > .control-sidebar-subheading {\n  margin-top: 0;\n}\n.control-sidebar-menu .menu-icon {\n  float: left;\n  width: 35px;\n  height: 35px;\n  border-radius: 50%;\n  text-align: center;\n  line-height: 35px;\n}\n.control-sidebar-menu .menu-info {\n  margin-left: 45px;\n  margin-top: 3px;\n}\n.control-sidebar-menu .menu-info > .control-sidebar-subheading {\n  margin: 0;\n}\n.control-sidebar-menu .menu-info > p {\n  margin: 0;\n  font-size: 11px;\n}\n.control-sidebar-menu .progress {\n  margin: 0;\n}\n.control-sidebar-dark {\n  color: #b8c7ce;\n}\n.control-sidebar-dark,\n.control-sidebar-dark + .control-sidebar-bg {\n  background: #222d32;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs {\n  border-bottom: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a {\n  background: #181f23;\n  color: #b8c7ce;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #141a1d;\n  border-bottom-color: #141a1d;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover {\n  color: #fff;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #222d32;\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-heading,\n.control-sidebar-dark .control-sidebar-subheading {\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a:hover {\n  background: #1e282c;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p {\n  color: #b8c7ce;\n}\n.control-sidebar-light {\n  color: #5e5e5e;\n}\n.control-sidebar-light,\n.control-sidebar-light + .control-sidebar-bg {\n  background: #f9fafc;\n  border-left: 1px solid #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs {\n  border-bottom: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a {\n  background: #e8ecf4;\n  color: #444444;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #d2d6de;\n  border-bottom-color: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #eff1f7;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #f9fafc;\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-heading,\n.control-sidebar-light .control-sidebar-subheading {\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-menu {\n  margin-left: -14px;\n}\n.control-sidebar-light .control-sidebar-menu > li > a:hover {\n  background: #f4f4f5;\n}\n.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p {\n  color: #5e5e5e;\n}\n/*\n * Component: Dropdown menus\n * -------------------------\n */\n/*Dropdowns in general*/\n.dropdown-menu {\n  box-shadow: none;\n  border-color: #eee;\n}\n.dropdown-menu > li > a {\n  color: #777;\n}\n.dropdown-menu > li > a > .glyphicon,\n.dropdown-menu > li > a > .fa,\n.dropdown-menu > li > a > .ion {\n  margin-right: 10px;\n}\n.dropdown-menu > li > a:hover {\n  background-color: #e1e3e9;\n  color: #333;\n}\n.dropdown-menu > .divider {\n  background-color: #eee;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu,\n.navbar-nav > .messages-menu > .dropdown-menu,\n.navbar-nav > .tasks-menu > .dropdown-menu {\n  width: 280px;\n  padding: 0 0 0 0;\n  margin: 0;\n  top: 100%;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li,\n.navbar-nav > .messages-menu > .dropdown-menu > li,\n.navbar-nav > .tasks-menu > .dropdown-menu > li {\n  position: relative;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.header,\n.navbar-nav > .messages-menu > .dropdown-menu > li.header,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.header {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  background-color: #ffffff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #f4f4f4;\n  color: #444444;\n  font-size: 14px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n  font-size: 12px;\n  background-color: #fff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #eeeeee;\n  color: #444 !important;\n  text-align: center;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover {\n  text-decoration: none;\n  font-weight: normal;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu {\n  max-height: 200px;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow-x: hidden;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  display: block;\n  white-space: nowrap;\n  /* Prevent text from breaking */\n  border-bottom: 1px solid #f4f4f4;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover {\n  background: #f4f4f4;\n  text-decoration: none;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a {\n  color: #444444;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  padding: 10px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion {\n  width: 20px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a {\n  margin: 0;\n  padding: 10px 10px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img {\n  margin: auto 10px auto auto;\n  width: 40px;\n  height: 40px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 {\n  padding: 0;\n  margin: 0 0 0 45px;\n  color: #444444;\n  font-size: 15px;\n  position: relative;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small {\n  color: #999999;\n  font-size: 10px;\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p {\n  margin: 0 0 0 45px;\n  font-size: 12px;\n  color: #888888;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  clear: both;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  padding: 10px;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3 {\n  font-size: 14px;\n  padding: 0;\n  margin: 0 0 10px 0;\n  color: #666666;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress {\n  padding: 0;\n  margin: 0;\n}\n.navbar-nav > .user-menu > .dropdown-menu {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n  padding: 1px 0 0 0;\n  border-top-width: 0;\n  width: 280px;\n}\n.navbar-nav > .user-menu > .dropdown-menu,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header {\n  height: 175px;\n  padding: 10px;\n  text-align: center;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img {\n  z-index: 5;\n  height: 90px;\n  width: 90px;\n  border: 3px solid;\n  border-color: transparent;\n  border-color: rgba(255, 255, 255, 0.2);\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p {\n  z-index: 5;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  font-size: 17px;\n  margin-top: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small {\n  display: block;\n  font-size: 12px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  padding: 15px;\n  border-bottom: 1px solid #f4f4f4;\n  border-top: 1px solid #dddddd;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n  color: #444 !important;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer {\n  background-color: #f9f9f9;\n  padding: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default {\n  color: #666666;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover {\n    background-color: #f9f9f9;\n  }\n}\n.navbar-nav > .user-menu .user-image {\n  float: left;\n  width: 25px;\n  height: 25px;\n  border-radius: 50%;\n  margin-right: 10px;\n  margin-top: -2px;\n}\n@media (max-width: 767px) {\n  .navbar-nav > .user-menu .user-image {\n    float: none;\n    margin-right: 0;\n    margin-top: -8px;\n    line-height: 10px;\n  }\n}\n/* Add fade animation to dropdown menus by appending\n the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/\n.open:not(.dropup) > .animated-dropdown-menu {\n  backface-visibility: visible !important;\n  -webkit-animation: flipInX 0.7s both;\n  -o-animation: flipInX 0.7s both;\n  animation: flipInX 0.7s both;\n}\n@keyframes flipInX {\n  0% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transition-timing-function: ease-in;\n  }\n  60% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    transform: perspective(400px);\n  }\n}\n@-webkit-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-transition-timing-function: ease-in;\n  }\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    -webkit-transform: perspective(400px);\n  }\n}\n/* Fix dropdown menu in navbars */\n.navbar-custom-menu > .navbar-nav > li {\n  position: relative;\n}\n.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n  position: absolute;\n  right: 0;\n  left: auto;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu > .navbar-nav {\n    float: right;\n  }\n  .navbar-custom-menu > .navbar-nav > li {\n    position: static;\n  }\n  .navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n    position: absolute;\n    right: 5%;\n    left: auto;\n    border: 1px solid #ddd;\n    background: #fff;\n  }\n}\n/*\n * Component: Form\n * ---------------\n */\n.form-control {\n  border-radius: 0;\n  box-shadow: none;\n  border-color: #d2d6de;\n}\n.form-control:focus {\n  border-color: #008199;\n  box-shadow: none;\n}\n.form-control::-moz-placeholder,\n.form-control:-ms-input-placeholder,\n.form-control::-webkit-input-placeholder {\n  color: #bbb;\n  opacity: 1;\n}\n.form-control:not(select) {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.form-group.has-success label {\n  color: #00a65a;\n}\n.form-group.has-success .form-control {\n  border-color: #00a65a;\n  box-shadow: none;\n}\n.form-group.has-success .help-block {\n  color: #00a65a;\n}\n.form-group.has-warning label, .form-group:has(> .has-warning) label {\n  color: #f39c12;\n}\n.form-group.has-warning .form-control, .form-group:has(> .has-warning) .form-control {\n  border-color: #f39c12;\n  box-shadow: none;\n}\n.form-group.has-warning .help-block, .form-group:has(> .has-warning) .help-block {\n  color: #f39c12;\n}\n.form-group.has-error label {\n  color: #dd4b39;\n}\n.form-group.has-error .form-control {\n  border-color: #dd4b39;\n  box-shadow: none;\n}\n.form-group.has-error .help-block {\n  color: #dd4b39;\n}\n/* Input group */\n.input-group .input-group-addon {\n  border-radius: 0;\n  border-color: #d2d6de;\n  background-color: #fff;\n}\n/* button groups */\n.btn-group-vertical .btn.btn-flat:first-of-type,\n.btn-group-vertical .btn.btn-flat:last-of-type {\n  border-radius: 0;\n}\n.icheck > label {\n  padding-left: 0;\n}\n/* support Font Awesome icons in form-control */\n.form-control-feedback.fa {\n  line-height: 34px;\n}\n.input-lg + .form-control-feedback.fa,\n.input-group-lg + .form-control-feedback.fa,\n.form-group-lg .form-control + .form-control-feedback.fa {\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback.fa,\n.input-group-sm + .form-control-feedback.fa,\n.form-group-sm .form-control + .form-control-feedback.fa {\n  line-height: 30px;\n}\n/* Basti: let table add margins  */\ntd .form-group {\n  margin-bottom: 0;\n}\n/*\n * Component: Progress Bar\n * -----------------------\n */\n.progress,\n.progress > .progress-bar {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.progress,\n.progress > .progress-bar,\n.progress .progress-bar,\n.progress > .progress-bar .progress-bar {\n  border-radius: 1px;\n}\n/* size variation */\n.progress.sm,\n.progress-sm {\n  height: 10px;\n}\n.progress.sm,\n.progress-sm,\n.progress.sm .progress-bar,\n.progress-sm .progress-bar {\n  border-radius: 1px;\n}\n.progress.xs,\n.progress-xs {\n  height: 7px;\n}\n.progress.xs,\n.progress-xs,\n.progress.xs .progress-bar,\n.progress-xs .progress-bar {\n  border-radius: 1px;\n}\n.progress.xxs,\n.progress-xxs {\n  height: 3px;\n}\n.progress.xxs,\n.progress-xxs,\n.progress.xxs .progress-bar,\n.progress-xxs .progress-bar {\n  border-radius: 1px;\n}\n/* Vertical bars */\n.progress.vertical {\n  position: relative;\n  width: 30px;\n  height: 200px;\n  display: inline-block;\n  margin-right: 10px;\n}\n.progress.vertical > .progress-bar {\n  width: 100%;\n  position: absolute;\n  bottom: 0;\n}\n.progress.vertical.sm,\n.progress.vertical.progress-sm {\n  width: 20px;\n}\n.progress.vertical.xs,\n.progress.vertical.progress-xs {\n  width: 10px;\n}\n.progress.vertical.xxs,\n.progress.vertical.progress-xxs {\n  width: 3px;\n}\n.progress-group .progress-text {\n  font-weight: 600;\n}\n.progress-group .progress-number {\n  float: right;\n}\n/* Remove margins from progress bars when put in a table */\n.table tr > td .progress {\n  margin: 0;\n}\n.progress-bar-light-blue,\n.progress-bar-primary {\n  background-color: #008199;\n}\n.progress-striped .progress-bar-light-blue,\n.progress-striped .progress-bar-primary {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-green,\n.progress-bar-success {\n  background-color: #00a65a;\n}\n.progress-striped .progress-bar-green,\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-aqua,\n.progress-bar-info {\n  background-color: #00c0ef;\n}\n.progress-striped .progress-bar-aqua,\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-yellow,\n.progress-bar-warning {\n  background-color: #f39c12;\n}\n.progress-striped .progress-bar-yellow,\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-red,\n.progress-bar-danger {\n  background-color: #dd4b39;\n}\n.progress-striped .progress-bar-red,\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n/*\n * Component: Box\n * --------------\n */\n.box {\n  position: relative;\n  border-radius: 3px;\n  background: #ffffff;\n  border-top: 3px solid #d2d6de;\n  margin-bottom: 20px;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.box.box-primary {\n  border-top-color: #008199;\n}\n.box.box-info {\n  border-top-color: #00c0ef;\n}\n.box.box-danger {\n  border-top-color: #dd4b39;\n}\n.box.box-warning {\n  border-top-color: #f39c12;\n}\n.box.box-success {\n  border-top-color: #00a65a;\n}\n.box.box-default {\n  border-top-color: #d2d6de;\n}\n.box.collapsed-box .box-body,\n.box.collapsed-box .box-footer {\n  display: none;\n}\n.box .nav-stacked > li {\n  border-bottom: 1px solid #f4f4f4;\n  margin: 0;\n}\n.box .nav-stacked > li:last-of-type {\n  border-bottom: none;\n}\n.box.height-control .box-body {\n  max-height: 300px;\n  overflow: auto;\n}\n.box .border-right {\n  border-right: 1px solid #f4f4f4;\n}\n.box .border-left {\n  border-left: 1px solid #f4f4f4;\n}\n.box.box-solid {\n  border-top: 0;\n}\n.box.box-solid > .box-header .btn.btn-default {\n  background: transparent;\n}\n.box.box-solid > .box-header .btn:hover,\n.box.box-solid > .box-header a:hover {\n  background: rgba(0, 0, 0, 0.1);\n}\n.box.box-solid.box-default {\n  border: 1px solid #d2d6de;\n}\n.box.box-solid.box-default > .box-header {\n  color: #444444;\n  background: #d2d6de;\n  background-color: #d2d6de;\n}\n.box.box-solid.box-default > .box-header a,\n.box.box-solid.box-default > .box-header .btn {\n  color: #444444;\n}\n.box.box-solid.box-primary {\n  border: 1px solid #008199;\n}\n.box.box-solid.box-primary > .box-header {\n  color: #ffffff;\n  background: #008199;\n  background-color: #008199;\n}\n.box.box-solid.box-primary > .box-header a,\n.box.box-solid.box-primary > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-info {\n  border: 1px solid #00c0ef;\n}\n.box.box-solid.box-info > .box-header {\n  color: #ffffff;\n  background: #00c0ef;\n  background-color: #00c0ef;\n}\n.box.box-solid.box-info > .box-header a,\n.box.box-solid.box-info > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-danger {\n  border: 1px solid #dd4b39;\n}\n.box.box-solid.box-danger > .box-header {\n  color: #ffffff;\n  background: #dd4b39;\n  background-color: #dd4b39;\n}\n.box.box-solid.box-danger > .box-header a,\n.box.box-solid.box-danger > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-warning {\n  border: 1px solid #f39c12;\n}\n.box.box-solid.box-warning > .box-header {\n  color: #ffffff;\n  background: #f39c12;\n  background-color: #f39c12;\n}\n.box.box-solid.box-warning > .box-header a,\n.box.box-solid.box-warning > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-success {\n  border: 1px solid #00a65a;\n}\n.box.box-solid.box-success > .box-header {\n  color: #ffffff;\n  background: #00a65a;\n  background-color: #00a65a;\n}\n.box.box-solid.box-success > .box-header a,\n.box.box-solid.box-success > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid > .box-header > .box-tools .btn {\n  border: 0;\n  box-shadow: none;\n}\n.box.box-solid[class*='bg'] > .box-header {\n  color: #fff;\n}\n.box .box-group > .box {\n  margin-bottom: 5px;\n}\n.box .knob-label {\n  text-align: center;\n  color: #333;\n  font-weight: 100;\n  font-size: 12px;\n  margin-bottom: 0.3em;\n}\n.box > .overlay,\n.overlay-wrapper > .overlay,\n.box > .loading-img,\n.overlay-wrapper > .loading-img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n.box .overlay,\n.overlay-wrapper .overlay {\n  z-index: 50;\n  background: rgba(255, 255, 255, 0.7);\n  border-radius: 3px;\n}\n.box .overlay > .fa,\n.overlay-wrapper .overlay > .fa {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin-left: -15px;\n  margin-top: -15px;\n  color: #000;\n  font-size: 30px;\n}\n.box .overlay.dark,\n.overlay-wrapper .overlay.dark {\n  background: rgba(0, 0, 0, 0.5);\n}\n.box-header:before,\n.box-body:before,\n.box-footer:before,\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  content: \" \";\n  display: table;\n}\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  clear: both;\n}\n.box-header {\n  color: #444;\n  display: block;\n  padding: 10px;\n  position: relative;\n}\n.box-header.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.collapsed-box .box-header.with-border {\n  border-bottom: none;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion,\n.box-header .box-title {\n  display: inline-block;\n  font-size: 18px;\n  margin: 0;\n  line-height: 1;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion {\n  margin-right: 5px;\n}\n.box-header > .box-tools {\n  position: absolute;\n  right: 10px;\n  top: 5px;\n}\n.box-header > .box-tools [data-toggle=\"tooltip\"] {\n  position: relative;\n}\n.box-header > .box-tools.pull-right .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.btn-box-tool {\n  padding: 5px;\n  font-size: 12px;\n  background: transparent;\n  color: #97a0b3;\n}\n.open .btn-box-tool,\n.btn-box-tool:hover {\n  color: #606c84;\n}\n.btn-box-tool.btn:active {\n  box-shadow: none;\n}\n.box-body {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  padding: 10px;\n}\n.no-header .box-body {\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.box-body > .table {\n  margin-bottom: 0;\n}\n.box-body .fc {\n  margin-top: 5px;\n}\n.box-body .full-width-chart {\n  margin: -19px;\n}\n.box-body.no-padding .full-width-chart {\n  margin: -9px;\n}\n.box-body .box-pane {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 3px;\n}\n.box-body .box-pane-right {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 0;\n}\n.box-footer {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  border-top: 1px solid #f4f4f4;\n  padding: 10px;\n  background-color: #ffffff;\n}\n.chart-legend {\n  margin: 10px 0;\n}\n@media (max-width: 991px) {\n  .chart-legend > li {\n    float: left;\n    margin-right: 10px;\n  }\n}\n.box-comments {\n  background: #f7f7f7;\n}\n.box-comments .box-comment {\n  padding: 8px 0;\n  border-bottom: 1px solid #eee;\n}\n.box-comments .box-comment:before,\n.box-comments .box-comment:after {\n  content: \" \";\n  display: table;\n}\n.box-comments .box-comment:after {\n  clear: both;\n}\n.box-comments .box-comment:last-of-type {\n  border-bottom: 0;\n}\n.box-comments .box-comment:first-of-type {\n  padding-top: 0;\n}\n.box-comments .box-comment img {\n  float: left;\n}\n.box-comments .comment-text {\n  margin-left: 40px;\n  color: #555;\n}\n.box-comments .username {\n  color: #444;\n  display: block;\n  font-weight: 600;\n}\n.box-comments .text-muted {\n  font-weight: 400;\n  font-size: 12px;\n}\n/* Widget: TODO LIST */\n.todo-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow: auto;\n}\n.todo-list > li {\n  border-radius: 2px;\n  padding: 10px;\n  background: #f4f4f4;\n  margin-bottom: 2px;\n  border-left: 2px solid #e6e7e8;\n  color: #444;\n}\n.todo-list > li:last-of-type {\n  margin-bottom: 0;\n}\n.todo-list > li > input[type='checkbox'] {\n  margin: 0 10px 0 5px;\n}\n.todo-list > li .text {\n  display: inline-block;\n  margin-left: 5px;\n  font-weight: 600;\n}\n.todo-list > li .label {\n  margin-left: 10px;\n  font-size: 9px;\n}\n.todo-list > li .tools {\n  display: none;\n  float: right;\n  color: #dd4b39;\n}\n.todo-list > li .tools > .fa,\n.todo-list > li .tools > .glyphicon,\n.todo-list > li .tools > .ion {\n  margin-right: 5px;\n  cursor: pointer;\n}\n.todo-list > li:hover .tools {\n  display: inline-block;\n}\n.todo-list > li.done {\n  color: #999;\n}\n.todo-list > li.done .text {\n  text-decoration: line-through;\n  font-weight: 500;\n}\n.todo-list > li.done .label {\n  background: #d2d6de !important;\n}\n.todo-list .danger {\n  border-left-color: #dd4b39;\n}\n.todo-list .warning {\n  border-left-color: #f39c12;\n}\n.todo-list .info {\n  border-left-color: #00c0ef;\n}\n.todo-list .success {\n  border-left-color: #00a65a;\n}\n.todo-list .primary {\n  border-left-color: #008199;\n}\n.todo-list .handle {\n  display: inline-block;\n  cursor: move;\n  margin: 0 5px;\n}\n/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/\n.chat {\n  padding: 5px 20px 5px 10px;\n}\n.chat .item {\n  margin-bottom: 10px;\n}\n.chat .item:before,\n.chat .item:after {\n  content: \" \";\n  display: table;\n}\n.chat .item:after {\n  clear: both;\n}\n.chat .item > img {\n  width: 40px;\n  height: 40px;\n  border: 2px solid transparent;\n  border-radius: 50%;\n}\n.chat .item > .online {\n  border: 2px solid #00a65a;\n}\n.chat .item > .offline {\n  border: 2px solid #dd4b39;\n}\n.chat .item > .message {\n  margin-left: 55px;\n  margin-top: -40px;\n}\n.chat .item > .message > .name {\n  display: block;\n  font-weight: 600;\n}\n.chat .item > .attachment {\n  border-radius: 3px;\n  background: #f4f4f4;\n  margin-left: 65px;\n  margin-right: 15px;\n  padding: 10px;\n}\n.chat .item > .attachment > h4 {\n  margin: 0 0 5px 0;\n  font-weight: 600;\n  font-size: 14px;\n}\n.chat .item > .attachment > p,\n.chat .item > .attachment > .filename {\n  font-weight: 600;\n  font-size: 13px;\n  font-style: italic;\n  margin: 0;\n}\n.chat .item > .attachment:before,\n.chat .item > .attachment:after {\n  content: \" \";\n  display: table;\n}\n.chat .item > .attachment:after {\n  clear: both;\n}\n.box-input {\n  max-width: 200px;\n}\n.modal .panel-body {\n  color: #444;\n}\n/*\n * Component: Info Box\n * -------------------\n */\n.info-box {\n  display: block;\n  min-height: 90px;\n  background: #fff;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 2px;\n  margin-bottom: 15px;\n}\n.info-box small {\n  font-size: 14px;\n}\n.info-box .progress {\n  background: rgba(0, 0, 0, 0.2);\n  margin: 5px -10px 5px -10px;\n  height: 2px;\n}\n.info-box .progress,\n.info-box .progress .progress-bar {\n  border-radius: 0;\n}\n.info-box .progress .progress-bar {\n  background: #fff;\n}\n.info-box-icon {\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n  display: block;\n  float: left;\n  height: 90px;\n  width: 90px;\n  text-align: center;\n  font-size: 45px;\n  line-height: 90px;\n  background: rgba(0, 0, 0, 0.2);\n}\n.info-box-icon > img {\n  max-width: 100%;\n}\n.info-box-content {\n  padding: 5px 10px;\n  margin-left: 90px;\n}\n.info-box-number {\n  display: block;\n  font-weight: bold;\n  font-size: 18px;\n}\n.progress-description,\n.info-box-text {\n  display: block;\n  font-size: 14px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.info-box-text {\n  text-transform: uppercase;\n}\n.info-box-more {\n  display: block;\n}\n.progress-description {\n  margin: 0;\n}\n/*\n * Component: Timeline\n * -------------------\n */\n.timeline {\n  position: relative;\n  margin: 0 0 30px 0;\n  padding: 0;\n  list-style: none;\n}\n.timeline:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  width: 4px;\n  background: #ddd;\n  left: 31px;\n  margin: 0;\n  border-radius: 2px;\n}\n.timeline > li {\n  position: relative;\n  margin-right: 10px;\n  margin-bottom: 15px;\n}\n.timeline > li:before,\n.timeline > li:after {\n  content: \" \";\n  display: table;\n}\n.timeline > li:after {\n  clear: both;\n}\n.timeline > li > .timeline-inter {\n  margin-top: 5px;\n  margin-left: 60px;\n  margin-right: 15px;\n  padding: 0;\n  position: relative;\n}\n.timeline > li > .timeline-item {\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  margin-top: 0;\n  background: #fff;\n  color: #444;\n  margin-left: 60px;\n  margin-right: 15px;\n  padding: 0;\n  position: relative;\n}\n.timeline > li > .timeline-item > .time {\n  color: #999;\n  float: right;\n  padding: 10px;\n  font-size: 12px;\n}\n.timeline > li > .timeline-item > .timeline-header {\n  margin: 0;\n  color: #555;\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n  font-size: 16px;\n  line-height: 1.1;\n}\n.timeline > li > .timeline-item > .timeline-header > a {\n  font-weight: 600;\n}\n.timeline > li > .timeline-item > .timeline-body,\n.timeline > li > .timeline-item > .timeline-footer {\n  padding: 10px;\n}\n.timeline > li > .fa,\n.timeline > li > .glyphicon,\n.timeline > li > .ion {\n  width: 30px;\n  height: 30px;\n  font-size: 15px;\n  line-height: 30px;\n  position: absolute;\n  color: #666;\n  background: #d2d6de;\n  border-radius: 50%;\n  text-align: center;\n  left: 18px;\n  top: 0;\n}\n.timeline > li > a > .fa,\n.timeline > li > a > .glyphicon,\n.timeline > li > a > .ion {\n  width: 30px;\n  height: 30px;\n  font-size: 15px;\n  line-height: 30px;\n  position: absolute;\n  color: #666;\n  background: #d2d6de;\n  border-radius: 50%;\n  text-align: center;\n  left: 18px;\n  top: 0;\n}\n.timeline > .time-label > span {\n  font-weight: 600;\n  padding: 5px;\n  display: inline-block;\n  background-color: #fff;\n  border-radius: 4px;\n}\n.timeline-inverse > li > .timeline-item {\n  background: #f0f0f0;\n  border: 1px solid #ddd;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.timeline-inverse > li > .timeline-item > .timeline-header {\n  border-bottom-color: #ddd;\n}\n/*\n * Component: Button\n * -----------------\n */\n.btn {\n  border-radius: 3px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid transparent;\n}\n.btn.uppercase {\n  text-transform: uppercase;\n}\n.btn.btn-flat {\n  border-radius: 0;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-width: 1px;\n}\n.btn.btn-footer {\n  border-radius: 0;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  padding: 10px 16px;\n  font-size: 14px;\n  border: none;\n}\n.btn:active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn:focus {\n  outline: none;\n}\n.btn.btn-file {\n  position: relative;\n  overflow: hidden;\n}\n.btn.btn-file > input[type='file'] {\n  position: absolute;\n  top: 0;\n  right: 0;\n  min-width: 100%;\n  min-height: 100%;\n  font-size: 100px;\n  text-align: right;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  outline: none;\n  background: white;\n  cursor: inherit;\n  display: block;\n}\n.btn-default {\n  background-color: #f4f4f4;\n  color: #444;\n  border-color: #ddd;\n}\n.btn-default:hover,\n.btn-default:active,\n.btn-default.hover {\n  background-color: #e7e7e7;\n}\n.btn-primary {\n  background-color: #008199;\n  border-color: #006b80;\n}\n.btn-primary:hover,\n.btn-primary:active,\n.btn-primary.hover {\n  background-color: #006b80;\n}\n.btn-success {\n  background-color: #00a65a;\n  border-color: #008d4c;\n}\n.btn-success:hover,\n.btn-success:active,\n.btn-success.hover {\n  background-color: #008d4c;\n}\n.btn-info {\n  background-color: #00c0ef;\n  border-color: #00acd6;\n}\n.btn-info:hover,\n.btn-info:active,\n.btn-info.hover {\n  background-color: #00acd6;\n}\n.btn-danger {\n  background-color: #dd4b39;\n  border-color: #d73925;\n}\n.btn-danger:hover,\n.btn-danger:active,\n.btn-danger.hover {\n  background-color: #d73925;\n}\n.btn-warning {\n  background-color: #f39c12;\n  border-color: #e08e0b;\n}\n.btn-warning:hover,\n.btn-warning:active,\n.btn-warning.hover {\n  background-color: #e08e0b;\n}\n.btn-outline {\n  border: 1px solid #fff;\n  background: transparent;\n  color: #fff;\n}\n.btn-outline:hover,\n.btn-outline:focus,\n.btn-outline:active {\n  color: rgba(255, 255, 255, 0.7);\n  border-color: rgba(255, 255, 255, 0.7);\n}\n.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn[class*='bg-']:hover {\n  -webkit-box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n  box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n}\n.btn-app {\n  border-radius: 3px;\n  position: relative;\n  padding: 15px 5px;\n  margin: 0 0 10px 10px;\n  min-width: 80px;\n  height: 60px;\n  text-align: center;\n  color: #666;\n  border: 1px solid #ddd;\n  background-color: #f4f4f4;\n  font-size: 12px;\n}\n.btn-app > .fa,\n.btn-app > .glyphicon,\n.btn-app > .ion {\n  font-size: 20px;\n  display: block;\n}\n.btn-app:hover {\n  background: #f4f4f4;\n  color: #444;\n  border-color: #aaa;\n}\n.btn-app:active,\n.btn-app:focus {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-app > .badge {\n  position: absolute;\n  top: -3px;\n  right: -10px;\n  font-size: 10px;\n  font-weight: 400;\n}\n/*\n * Component: alert\n * ----------------\n */\n.alert {\n  border-radius: 3px;\n}\n.alert h4 {\n  font-weight: 600;\n}\n.alert .icon {\n  margin-right: 10px;\n}\n.alert .close {\n  color: #000;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.alert .close:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.alert a {\n  color: #fff;\n  text-decoration: underline;\n}\n.alert-success {\n  border-color: #008d4c;\n}\n.alert-danger,\n.alert-error {\n  border-color: #d73925;\n}\n.alert-warning {\n  border-color: #e08e0b;\n}\n.alert-info {\n  border-color: #006b80;\n}\n/*\n * Component: Nav\n * --------------\n */\n.nav > li > a:hover,\n.nav > li > a:active,\n.nav > li > a:focus {\n  color: #444;\n  background: #f7f7f7;\n}\n/* NAV PILLS */\n.nav-pills > li > a {\n  border-radius: 0;\n  border-top: 3px solid transparent;\n  color: #444;\n}\n.nav-pills > li > a > .fa,\n.nav-pills > li > a > .glyphicon,\n.nav-pills > li > a > .ion {\n  margin-right: 5px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  border-top-color: #008199;\n}\n.nav-pills > li.active > a {\n  font-weight: 600;\n}\n/* NAV STACKED */\n.nav-stacked > li > a {\n  border-radius: 0;\n  border-top: 0;\n  border-left: 3px solid transparent;\n  color: #444;\n}\n.nav-stacked > li.active > a,\n.nav-stacked > li.active > a:hover {\n  background: transparent;\n  color: #444;\n  border-top: 0;\n  border-left-color: #008199;\n}\n.nav-stacked > li.header {\n  border-bottom: 1px solid #ddd;\n  color: #777;\n  margin-bottom: 10px;\n  padding: 5px 10px;\n  text-transform: uppercase;\n}\n/* NAV TABS */\n.nav-tabs-custom {\n  margin-bottom: 20px;\n  background: #fff;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs {\n  margin: 0;\n  border-bottom-color: #f4f4f4;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs > li {\n  border-top: 3px solid transparent;\n  margin-bottom: -2px;\n  margin-right: 5px;\n}\n.nav-tabs-custom > .nav-tabs > li > a {\n  color: #444;\n  border-radius: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a.text-muted {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li > a,\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  background: transparent;\n  margin: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active {\n  border-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.active {\n  border-top-color: #008199;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a,\n.nav-tabs-custom > .nav-tabs > li.active:hover > a {\n  background-color: #fff;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a {\n  border-top-color: transparent;\n  border-left-color: #f4f4f4;\n  border-right-color: #f4f4f4;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type {\n  margin-left: 0;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a {\n  border-left-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs.pull-right {\n  float: none !important;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li {\n  float: right;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type {\n  margin-right: 0;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a {\n  border-left-width: 1px;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a {\n  border-left-color: #f4f4f4;\n  border-right-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.header {\n  line-height: 35px;\n  padding: 0 10px;\n  font-size: 20px;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.header > .fa,\n.nav-tabs-custom > .nav-tabs > li.header > .glyphicon,\n.nav-tabs-custom > .nav-tabs > li.header > .ion {\n  margin-right: 5px;\n}\n.nav-tabs-custom > .tab-content {\n  background: #fff;\n  padding: 10px;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.nav-tabs-custom .dropdown.open > a:active,\n.nav-tabs-custom .dropdown.open > a:focus {\n  background: transparent;\n  color: #999;\n}\n.nav-tabs-custom.tab-primary > .nav-tabs > li.active {\n  border-top-color: #008199;\n}\n.nav-tabs-custom.tab-info > .nav-tabs > li.active {\n  border-top-color: #00c0ef;\n}\n.nav-tabs-custom.tab-danger > .nav-tabs > li.active {\n  border-top-color: #dd4b39;\n}\n.nav-tabs-custom.tab-warning > .nav-tabs > li.active {\n  border-top-color: #f39c12;\n}\n.nav-tabs-custom.tab-success > .nav-tabs > li.active {\n  border-top-color: #00a65a;\n}\n.nav-tabs-custom.tab-default > .nav-tabs > li.active {\n  border-top-color: #d2d6de;\n}\n/* PAGINATION */\n.pagination > li > a {\n  background: #fafafa;\n  color: #666;\n}\n.pagination.pagination-flat > li > a {\n  border-radius: 0 !important;\n}\n/*\n * Component: Table\n * ----------------\n */\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  border-top: 1px solid #f4f4f4;\n}\n.table > thead > tr > th {\n  border-bottom: 2px solid #f4f4f4;\n}\n.table tr td .progress {\n  margin-top: 5px;\n}\n.table-bordered {\n  border: 1px solid #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table.no-border,\n.table.no-border td,\n.table.no-border th {\n  border: 0;\n}\n/* .text-center in tables */\ntable.text-center,\ntable.text-center td,\ntable.text-center th {\n  text-align: center;\n}\n.table.align th {\n  text-align: left;\n}\n.table.align td {\n  text-align: right;\n}\n/*\n * Component: Label\n * ----------------\n */\n.label-default {\n  background-color: #d2d6de;\n  color: #444;\n}\n/*\n * Component: modal\n * ----------------\n */\n.modal {\n  background: rgba(0, 0, 0, 0.3);\n}\n.modal-content {\n  border-radius: 0;\n  -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  border: 0;\n}\n@media (min-width: 768px) {\n  .modal-content {\n    -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n    box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  }\n}\n.modal-header {\n  border-bottom-color: #f4f4f4;\n}\n.modal-footer {\n  border-top-color: #f4f4f4;\n}\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  border-color: #005666;\n}\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  border-color: #c87f0a;\n}\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  border-color: #0097bc;\n}\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  border-color: #00733e;\n}\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  border-color: #c23321;\n}\n@media (min-width: 992px) {\n  .modal-xl {\n    width: 90%;\n  }\n}\n.modal-flex {\n  max-width: 90%;\n  width: fit-content;\n  width: -moz-fit-content;\n}\n.modal-flex .modal-content .modal-body {\n  overflow: auto;\n}\n/*\n * Page: Login & Register\n * ----------------------\n */\n.login-logo,\n.register-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.login-logo a,\n.register-logo a {\n  color: #444;\n}\n.login-page,\n.register-page {\n  background: #d2d6de;\n}\n.login-box,\n.register-box {\n  width: 360px;\n  margin: 7% auto;\n}\n@media (max-width: 768px) {\n  .login-box,\n  .register-box {\n    width: 90%;\n    margin-top: 20px;\n  }\n}\n.login-box-body,\n.register-box-body {\n  background: #fff;\n  padding: 20px;\n  border-top: 0;\n  color: #666;\n}\n.login-box-body .form-control-feedback,\n.register-box-body .form-control-feedback {\n  color: #777;\n}\n.login-box-msg,\n.register-box-msg {\n  margin: 0;\n  text-align: center;\n  padding: 0 20px 20px 20px;\n}\n.social-auth-links {\n  margin: 10px 0;\n}\n/*\n * Page: 400 and 500 error pages\n * ------------------------------\n */\n.error-page {\n  width: 600px;\n  margin: 20px auto 0 auto;\n}\n@media (max-width: 991px) {\n  .error-page {\n    width: 100%;\n  }\n}\n.error-page > .headline {\n  float: left;\n  font-size: 100px;\n  font-weight: 300;\n}\n@media (max-width: 991px) {\n  .error-page > .headline {\n    float: none;\n    text-align: center;\n  }\n}\n.error-page > .error-content {\n  margin-left: 190px;\n  display: block;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content {\n    margin-left: 0;\n  }\n}\n.error-page > .error-content > h3 {\n  font-weight: 300;\n  font-size: 25px;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content > h3 {\n    text-align: center;\n  }\n}\n/*\n * Plugin: Select2\n * ---------------\n */\n.select2-container--default.select2-container--focus,\n.select2-selection.select2-container--focus,\n.select2-container--default:focus,\n.select2-selection:focus,\n.select2-container--default:active,\n.select2-selection:active {\n  outline: none;\n}\n.select2-container--default .select2-selection--single,\n.select2-selection .select2-selection--single {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n  padding: 6px 12px;\n  height: 34px;\n}\n.select2-container--default.select2-container--open {\n  border-color: #008199;\n}\n.select2-dropdown {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #008199;\n  color: white;\n}\n.select2-results__option {\n  padding: 6px 12px;\n  user-select: none;\n  -webkit-user-select: none;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-left: 0;\n  padding-right: 0;\n  height: auto;\n  margin-top: -4px;\n}\n.select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n  padding-right: 6px;\n  padding-left: 20px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow {\n  height: 28px;\n  right: 3px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow b {\n  margin-top: 0;\n}\n.select2-dropdown .select2-search__field,\n.select2-search--inline .select2-search__field {\n  border: 1px solid #d2d6de;\n}\n.select2-dropdown .select2-search__field:focus,\n.select2-search--inline .select2-search__field:focus {\n  outline: none;\n  border: 1px solid #008199;\n}\n.select2-container--default .select2-results__option[aria-disabled=true] {\n  color: #999;\n}\n.select2-container--default .select2-results__option[aria-selected=true] {\n  background-color: #ddd;\n}\n.select2-container--default .select2-results__option[aria-selected=true],\n.select2-container--default .select2-results__option[aria-selected=true]:hover {\n  color: #444;\n}\n.select2-container--default .select2-selection--multiple {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-selection--multiple:focus {\n  border-color: #008199;\n}\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border-color: #d2d6de;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice {\n  background-color: #008199;\n  border-color: #006b80;\n  padding: 1px 10px;\n  color: #fff;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n  margin-right: 5px;\n  color: rgba(255, 255, 255, 0.7);\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n  color: #fff;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-right: 10px;\n}\n/*\n * General: Miscellaneous\n * ----------------------\n */\n.pad {\n  padding: 10px;\n}\n.margin {\n  margin: 10px;\n}\n.margin-bottom {\n  margin-bottom: 20px;\n}\n.margin-bottom-none {\n  margin-bottom: 0;\n}\n.margin-r-5 {\n  margin-right: 5px;\n}\n.inline {\n  display: inline;\n}\n.description-block {\n  display: block;\n  margin: 10px 0;\n  text-align: center;\n}\n.description-block.margin-bottom {\n  margin-bottom: 25px;\n}\n.description-block > .description-header {\n  margin: 0;\n  padding: 0;\n  font-weight: 600;\n  font-size: 16px;\n}\n.description-block > .description-text {\n  text-transform: uppercase;\n}\n.bg-red,\n.bg-yellow,\n.bg-aqua,\n.bg-blue,\n.bg-light-blue,\n.bg-green,\n.bg-navy,\n.bg-teal,\n.bg-olive,\n.bg-lime,\n.bg-orange,\n.bg-fuchsia,\n.bg-purple,\n.bg-maroon,\n.bg-black,\n.bg-red-active,\n.bg-yellow-active,\n.bg-aqua-active,\n.bg-blue-active,\n.bg-light-blue-active,\n.bg-green-active,\n.bg-navy-active,\n.bg-teal-active,\n.bg-olive-active,\n.bg-lime-active,\n.bg-orange-active,\n.bg-fuchsia-active,\n.bg-purple-active,\n.bg-maroon-active,\n.bg-black-active,\n.alert-success,\n.alert-danger,\n.alert-error,\n.alert-warning,\n.alert-info,\n.label-danger,\n.label-info,\n.label-warning,\n.label-primary,\n.label-success,\n.modal-primary .modal-body,\n.modal-primary .modal-header,\n.modal-primary .modal-footer,\n.modal-warning .modal-body,\n.modal-warning .modal-header,\n.modal-warning .modal-footer,\n.modal-info .modal-body,\n.modal-info .modal-header,\n.modal-info .modal-footer,\n.modal-success .modal-body,\n.modal-success .modal-header,\n.modal-success .modal-footer,\n.modal-danger .modal-body,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  color: #fff !important;\n}\n.bg-gray {\n  color: #000;\n  background-color: #d2d6de !important;\n}\n.bg-gray-light {\n  background-color: #f7f7f7;\n}\n.bg-black {\n  background-color: #111111 !important;\n}\n.bg-red,\n.alert-danger,\n.alert-error,\n.label-danger,\n.modal-danger .modal-body {\n  background-color: #dd4b39 !important;\n}\n.bg-yellow,\n.alert-warning,\n.label-warning,\n.modal-warning .modal-body {\n  background-color: #f39c12 !important;\n}\n.bg-aqua,\n.label-info,\n.modal-info .modal-body {\n  background-color: #00c0ef !important;\n}\n.bg-blue {\n  background-color: #008199 !important;\n}\n.bg-light-blue,\n.alert-info,\n.label-primary,\n.modal-primary .modal-body {\n  background-color: #008199 !important;\n}\n.bg-green,\n.alert-success,\n.label-success,\n.modal-success .modal-body {\n  background-color: #00a65a !important;\n}\n.bg-navy {\n  background-color: #001f3f !important;\n}\n.bg-teal {\n  background-color: #39cccc !important;\n}\n.bg-olive {\n  background-color: #3d9970 !important;\n}\n.bg-lime {\n  background-color: #01ff70 !important;\n}\n.bg-orange {\n  background-color: #ff851b !important;\n}\n.bg-fuchsia {\n  background-color: #f012be !important;\n}\n.bg-purple {\n  background-color: #605ca8 !important;\n}\n.bg-maroon {\n  background-color: #d81b60 !important;\n}\n.bg-gray-active {\n  color: #000;\n  background-color: #b5bbc8 !important;\n}\n.bg-black-active {\n  background-color: #000000 !important;\n}\n.bg-red-active,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  background-color: #d33724 !important;\n}\n.bg-yellow-active,\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  background-color: #db8b0b !important;\n}\n.bg-aqua-active,\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  background-color: #00a7d0 !important;\n}\n.bg-blue-active {\n  background-color: #005666 !important;\n}\n.bg-light-blue-active,\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  background-color: #00677a !important;\n}\n.bg-green-active,\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  background-color: #008d4c !important;\n}\n.bg-navy-active {\n  background-color: #001a35 !important;\n}\n.bg-teal-active {\n  background-color: #30bbbb !important;\n}\n.bg-olive-active {\n  background-color: #368763 !important;\n}\n.bg-lime-active {\n  background-color: #00e765 !important;\n}\n.bg-orange-active {\n  background-color: #ff7701 !important;\n}\n.bg-fuchsia-active {\n  background-color: #db0ead !important;\n}\n.bg-purple-active {\n  background-color: #555299 !important;\n}\n.bg-maroon-active {\n  background-color: #ca195a !important;\n}\n[class^=\"bg-\"].disabled {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.text-red {\n  color: #dd4b39 !important;\n}\n.text-yellow {\n  color: #f39c12 !important;\n}\n.text-aqua {\n  color: #00c0ef !important;\n}\n.text-blue {\n  color: #008199 !important;\n}\n.text-black {\n  color: #111111 !important;\n}\n.text-light-blue {\n  color: #008199 !important;\n}\n.text-green {\n  color: #00a65a !important;\n}\n.text-gray {\n  color: #d2d6de !important;\n}\n.text-navy {\n  color: #001f3f !important;\n}\n.text-teal {\n  color: #39cccc !important;\n}\n.text-olive {\n  color: #3d9970 !important;\n}\n.text-lime {\n  color: #01ff70 !important;\n}\n.text-orange {\n  color: #ff851b !important;\n}\n.text-fuchsia {\n  color: #f012be !important;\n}\n.text-purple {\n  color: #605ca8 !important;\n}\n.text-maroon {\n  color: #d81b60 !important;\n}\n.link-muted {\n  color: #7a869d;\n}\n.link-muted:hover,\n.link-muted:focus {\n  color: #606c84;\n}\n.link-black {\n  color: #666;\n}\n.link-black:hover,\n.link-black:focus {\n  color: #999;\n}\n.hide {\n  display: none !important;\n}\n.no-border {\n  border: 0 !important;\n}\n.no-padding {\n  padding: 0 !important;\n}\n.no-margin {\n  margin: 0 !important;\n}\n.no-shadow {\n  box-shadow: none !important;\n}\n.list-unstyled,\n.chart-legend {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.list-group-unbordered > .list-group-item {\n  border-left: 0;\n  border-right: 0;\n  border-radius: 0;\n  padding-left: 0;\n  padding-right: 0;\n}\n.flat {\n  border-radius: 0 !important;\n}\n.text-bold,\n.text-bold.table td,\n.text-bold.table th {\n  font-weight: 700;\n}\n.text-sm {\n  font-size: 12px;\n}\n.jqstooltip {\n  padding: 5px !important;\n  width: auto !important;\n  height: auto !important;\n}\n.bg-teal-gradient {\n  background: #39cccc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;\n  background: -ms-linear-gradient(bottom, #39cccc, #7adddd) !important;\n  background: -moz-linear-gradient(center bottom, #39cccc 0%, #7adddd 100%) !important;\n  background: -o-linear-gradient(#7adddd, #39cccc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-light-blue-gradient {\n  background: #008199 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #008199), color-stop(1, #00b5d6)) !important;\n  background: -ms-linear-gradient(bottom, #008199, #00b5d6) !important;\n  background: -moz-linear-gradient(center bottom, #008199 0%, #00b5d6 100%) !important;\n  background: -o-linear-gradient(#00b5d6, #008199) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00b5d6', endColorstr='#008199', GradientType=0) !important;\n  color: #fff;\n}\n.bg-blue-gradient {\n  background: #008199 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #008199), color-stop(1, #009fbd)) !important;\n  background: -ms-linear-gradient(bottom, #008199, #009fbd) !important;\n  background: -moz-linear-gradient(center bottom, #008199 0%, #009fbd 100%) !important;\n  background: -o-linear-gradient(#009fbd, #008199) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#009fbd', endColorstr='#008199', GradientType=0) !important;\n  color: #fff;\n}\n.bg-aqua-gradient {\n  background: #00c0ef !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;\n  background: -ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;\n  background: -moz-linear-gradient(center bottom, #00c0ef 0%, #14d1ff 100%) !important;\n  background: -o-linear-gradient(#14d1ff, #00c0ef) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;\n  color: #fff;\n}\n.bg-yellow-gradient {\n  background: #f39c12 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;\n  background: -ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;\n  background: -moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important;\n  background: -o-linear-gradient(#f7bc60, #f39c12) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;\n  color: #fff;\n}\n.bg-purple-gradient {\n  background: #605ca8 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;\n  background: -ms-linear-gradient(bottom, #605ca8, #9491c4) !important;\n  background: -moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important;\n  background: -o-linear-gradient(#9491c4, #605ca8) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;\n  color: #fff;\n}\n.bg-green-gradient {\n  background: #00a65a !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;\n  background: -ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;\n  background: -moz-linear-gradient(center bottom, #00a65a 0%, #00ca6d 100%) !important;\n  background: -o-linear-gradient(#00ca6d, #00a65a) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;\n  color: #fff;\n}\n.bg-red-gradient {\n  background: #dd4b39 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;\n  background: -ms-linear-gradient(bottom, #dd4b39, #e47365) !important;\n  background: -moz-linear-gradient(center bottom, #dd4b39 0%, #e47365 100%) !important;\n  background: -o-linear-gradient(#e47365, #dd4b39) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;\n  color: #fff;\n}\n.bg-black-gradient {\n  background: #111111 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #111111), color-stop(1, #2b2b2b)) !important;\n  background: -ms-linear-gradient(bottom, #111111, #2b2b2b) !important;\n  background: -moz-linear-gradient(center bottom, #111111 0%, #2b2b2b 100%) !important;\n  background: -o-linear-gradient(#2b2b2b, #111111) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;\n  color: #fff;\n}\n.bg-maroon-gradient {\n  background: #d81b60 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;\n  background: -ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;\n  background: -moz-linear-gradient(center bottom, #d81b60 0%, #e73f7c 100%) !important;\n  background: -o-linear-gradient(#e73f7c, #d81b60) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;\n  color: #fff;\n}\n.description-block .description-icon {\n  font-size: 16px;\n}\n.no-pad-top {\n  padding-top: 0;\n}\n.position-static {\n  position: static !important;\n}\n.list-header {\n  font-size: 15px;\n  padding: 10px 4px;\n  font-weight: bold;\n  color: #666;\n}\n.list-seperator {\n  height: 1px;\n  background: #f4f4f4;\n  margin: 15px 0 9px 0;\n}\n.list-link > a {\n  padding: 4px;\n  color: #777;\n}\n.list-link > a:hover {\n  color: #222;\n}\n.font-light {\n  font-weight: 300;\n}\n.user-block:before,\n.user-block:after {\n  content: \" \";\n  display: table;\n}\n.user-block:after {\n  clear: both;\n}\n.user-block img {\n  width: 40px;\n  height: 40px;\n  float: left;\n}\n.user-block .username,\n.user-block .description,\n.user-block .comment {\n  display: block;\n  margin-left: 50px;\n}\n.user-block .username {\n  font-size: 16px;\n  font-weight: 600;\n}\n.user-block .description {\n  color: #999;\n  font-size: 13px;\n}\n.user-block.user-block-sm .username,\n.user-block.user-block-sm .description,\n.user-block.user-block-sm .comment {\n  margin-left: 40px;\n}\n.user-block.user-block-sm .username {\n  font-size: 14px;\n}\n.img-sm,\n.img-md,\n.img-lg,\n.box-comments .box-comment img,\n.user-block.user-block-sm img {\n  float: left;\n}\n.img-sm,\n.box-comments .box-comment img,\n.user-block.user-block-sm img {\n  width: 30px !important;\n  height: 30px !important;\n}\n.img-sm + .img-push {\n  margin-left: 40px;\n}\n.img-md {\n  width: 60px;\n  height: 60px;\n}\n.img-md + .img-push {\n  margin-left: 70px;\n}\n.img-lg {\n  width: 100px;\n  height: 100px;\n}\n.img-lg + .img-push {\n  margin-left: 110px;\n}\n.img-bordered {\n  border: 3px solid #d2d6de;\n  padding: 3px;\n}\n.img-bordered-sm {\n  border: 2px solid #d2d6de;\n  padding: 2px;\n}\n.attachment-block {\n  border: 1px solid #f4f4f4;\n  padding: 5px;\n  margin-bottom: 10px;\n  background: #f7f7f7;\n}\n.attachment-block .attachment-img {\n  max-width: 100px;\n  max-height: 100px;\n  height: auto;\n  float: left;\n}\n.attachment-block .attachment-pushed {\n  margin-left: 110px;\n}\n.attachment-block .attachment-heading {\n  margin: 0;\n}\n.attachment-block .attachment-text {\n  color: #555;\n}\n.connectedSortable {\n  min-height: 100px;\n}\n.ui-helper-hidden-accessible {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n.sort-highlight {\n  background: #f4f4f4;\n  border: 1px dashed #ddd;\n  margin-bottom: 10px;\n}\n.full-opacity-hover {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.full-opacity-hover:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.chart {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n}\n.chart svg,\n.chart canvas {\n  width: 100% !important;\n}\n/*\n * Misc: print\n * -----------\n */\n@media print {\n  .no-print,\n  .main-sidebar,\n  .left-side,\n  .main-header,\n  .content-header {\n    display: none !important;\n  }\n  .content-wrapper,\n  .right-side,\n  .main-footer {\n    margin-left: 0 !important;\n    min-height: 0 !important;\n    -webkit-transform: translate(0, 0) !important;\n    -ms-transform: translate(0, 0) !important;\n    -o-transform: translate(0, 0) !important;\n    transform: translate(0, 0) !important;\n  }\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 0 !important;\n  }\n  .invoice {\n    width: 100%;\n    border: 0;\n    margin: 0;\n    padding: 0;\n  }\n  .invoice-col {\n    float: left;\n    width: 33.3333333%;\n  }\n  .table-responsive {\n    overflow: auto;\n  }\n  .table-responsive > .table tr th,\n  .table-responsive > .table tr td {\n    white-space: normal !important;\n  }\n}\n", ".dl-small-horizontal dd::before, .dl-small-horizontal dd::after {\n  content: \" \";\n  display: table;\n}\n\n.dl-small-horizontal dd::after {\n  clear: both;\n}\n\ndl.dl-horizontal.dl-horizontal-large dt {\n  width: 300px;\n}\n\ndl.dl-horizontal.dl-horizontal-large dd {\n  margin-left: 320px;\n}\n\n@media (min-width: 768px) {\n  .dl-small-horizontal dt {\n    clear: left;\n    float: left;\n    overflow: hidden;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    width: 130px;\n  }\n  .dl-small-horizontal dd {\n    margin-left: 140px;\n  }\n  .pac-container {\n    z-index: 1051 !important;\n  }\n}\ntd.spacer {\n  border-right: solid 1px #ddd;\n  border-top: solid 1px #ddd;\n  margin-right: 10px;\n  width: 5%;\n}\n\ntr.spaced_detail td:not(.spacer) {\n  border-top: none !important;\n}\n\ntd.spaced, th.spaced {\n  width: 5%;\n}\n\n.draggable {\n  display: block;\n  margin: 3px 10px;\n  background-color: #eeeeee;\n  border: thin solid silver;\n  cursor: move;\n  -moz-border-radius: 4px 4px 4px 4px;\n  border-radius: 4px 4px 4px 4px;\n  padding: 6px;\n}\n\nul.sortable {\n  display: block;\n  min-height: 350px;\n  max-height: 350px;\n  overflow: auto;\n  border: thin solid #cccccc;\n  padding: 4px 4px 4px 4px;\n}\n\n.grid th {\n  padding: 0;\n  border-left: thin solid silver;\n  white-space: nowrap;\n  text-align: center;\n}\n\n.grid th:first-child {\n  border-left: none;\n}\n\n.grid td {\n  padding: 0;\n  border-top: thin solid silver;\n  border-left: thin solid silver;\n  white-space: nowrap;\n}\n\n.grid td:first-child {\n  border-left: none;\n}\n\n.grid td img {\n  margin-right: 3px;\n}\n\n.grid input, .grid textarea {\n  padding: 5px;\n  border: 0;\n}\n\n.grid .data {\n  background-color: #fff;\n}\n\nspan.label-block {\n  display: inline-block !important;\n  width: 100%;\n  padding-top: 4px;\n  padding-bottom: 5px;\n}\n\nbody.loading, body.loading * {\n  cursor: progress !important;\n}\n\n.handle {\n  cursor: pointer;\n}\n\ntr.handle:hover {\n  background-color: #f5f5f5;\n}\n\ndt.dl-horizontal {\n  padding: 180px !important;\n}\n\ndd.dl-horizontal {\n  margin-left: 200px !important;\n}\n\ndiv.nav-tabs-contacts > ul.nav-tabs > li > a {\n  padding: 10px;\n}\n\n.context-menu {\n  position: fixed;\n  width: inherit;\n  z-index: 1010;\n}\n\n.contact-row-primary {\n  width: 50pt;\n}\n\n.contact-row-buttons {\n  width: 65pt;\n  text-align: right;\n}\n\n.contact-row-buttons a {\n  margin-left: 10px;\n}\n\nul.nav-stacked ul.nav-stacked > li > a {\n  padding-left: 50px;\n}\n\n.radio-inline {\n  margin-right: 30px;\n}\n\n.border-bottom-shadow {\n  border-bottom: 1px solid #ddd;\n  -webkit-box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.1);\n  -moz-box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.1);\n}\n\n.sidebar-collapse .content-header-fixed {\n  margin-left: 50px;\n}\n\n@media (max-width: 767px) {\n  .content-header-fixed {\n    margin-left: 0;\n  }\n  .main-footer {\n    margin-left: 0;\n  }\n}\ndl > dt {\n  font-weight: normal;\n  color: #999;\n}\n\n.main-footer {\n  border: none;\n  bottom: 0;\n  left: 0;\n  position: fixed;\n  right: 0;\n  z-index: 800;\n  padding: 0;\n  border-top: 1px solid #ddd;\n  -webkit-box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.1);\n  -moz-box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.1);\n}\n\n.main-footer > .btn-group {\n  margin-top: 0;\n  margin-bottom: 0;\n  transition: margin-left 0.3s ease-in-out 0s;\n  display: block;\n}\n\n.main-footer .btn-default:hover {\n  background-color: #d0d0d0;\n}\n\n.footer-text {\n  color: #777;\n  line-height: 40px;\n  margin-left: 8px;\n}\n\nsection.content {\n  margin-top: 255px;\n  padding-bottom: 40px;\n}\n\ntable.table thead th {\n  font-weight: normal;\n  color: #999;\n  border-bottom: none;\n}\n\ntable.burnoutable {\n  table-layout: fixed;\n  background-color: white;\n}\n\ndiv.table-responsive-x {\n  overflow-x: auto;\n}\n\ntable.burnoutable td, table.burnoutable th {\n  white-space: nowrap;\n  word-wrap: break-word;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  border: thin solid #f4f4f4;\n  border-top: none;\n}\n\n/* A label fills the cell, so it has to cut off its own text - the ellipsis of the cell only\n   applies to text the cell holds itself. */\ntable.burnoutable td span.label-block {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\ntable.burnoutable tbody tr:first-child, table.burnoutable tbody tr:first-child td {\n  height: 0;\n  padding: 0;\n  margin: 0;\n}\n\ntable.table_burnoutheader {\n  margin-bottom: 5px;\n  table-layout: fixed;\n}\n\ntable.table_burnoutheader th {\n  padding-left: 8px;\n  padding-right: 8px;\n  white-space: nowrap;\n  word-wrap: break-word;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.burnoutheader th.burnoutable-sorted-asc::after, .burnoutheader th.burnoutable-sorted-desc::after, .burnoutheader th.burnoutable-sortable::after {\n  font-family: FontAwesome;\n  font-size: 12px;\n}\n\n.burnoutheader th.burnoutable-sorted-asc::after {\n  content: \" \\f160\";\n}\n\n.burnoutheader th.burnoutable-sorted-desc::after {\n  content: \" \\f161\";\n}\n\n.burnoutheader th.burnoutable-sortable::after {\n  opacity: 0.5;\n  content: \" \\f07d\";\n}\n\n.burnoutheader th.burnoutable-sorted-asc, .burnoutheader th.burnoutable-sorted-desc, .burnoutheader th.burnoutable-sortable {\n  cursor: pointer;\n}\n\nh3 + .dropdown, h3 + a {\n  margin-left: 10px;\n  display: inline-block;\n  font-size: 14pt;\n}\n\n.inline-block {\n  display: inline-block;\n}\n\n.widget {\n  display: inline-block;\n  width: 200px;\n  height: 120px;\n  background-color: white;\n  margin: 10px;\n  text-align: center;\n  font-size: large;\n  padding-top: 20px;\n  border-bottom: 1px solid #ddd;\n  -webkit-box-shadow: 0 2px 6px 2px rgba(0, 0, 0, 0.1);\n  -moz-box-shadow: 0 2px 6px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 2px 6px 2px rgba(0, 0, 0, 0.1);\n}\n\n.widget .fa {\n  display: block;\n  margin: 10px;\n  font-size: 25pt;\n}\n\n.master-detail.master-detail-master ul.nav.nav-pills.nav-stacked li.active a,\n.master-detail.master-detail-master ul.nav.nav-pills.nav-stacked li.active a:focus {\n  background-color: #008199;\n  color: white;\n}\n\n.master-detail.master-detail-master {\n  position: sticky;\n  max-height: calc(100vh - 165px);\n  overflow-y: auto;\n  padding-right: 2px;\n}\n.master-detail.master-detail-master li:not(:hover) .master-detail-master-remove {\n  visibility: hidden;\n  opacity: 0;\n  transition: visibility 0s linear 300ms, opacity 300ms;\n}\n\n.master-detail.master-detail-detail {\n  position: sticky;\n  max-height: calc(100vh - 165px);\n  overflow-y: auto;\n  padding-left: 0;\n}\n\n.modal .master-detail.master-detail-detail .box {\n  margin-bottom: 0;\n}\n\n.box-body table.table:first-child tr th {\n  border-top: none;\n}\n\n.box-body table.table:first-child tr td {\n  border-top: none;\n}\n\ntable.table.merge-table td:nth-child(2) {\n  width: 35%;\n}\n\ntable.table.merge-table td:nth-child(3) {\n  width: 40px;\n}\n\ntable.table.merge-table td:last-child {\n  width: 35%;\n}\n\ninput.radio_buttons.inline label.radio {\n  display: inline-block;\n}\n\n.modal-body .modal-body-gray {\n  background-color: #ecf0f5;\n  padding: 10px;\n  margin: -15px -15px;\n}\n\n.form-section {\n  border-bottom: 1px solid #eee;\n  padding-bottom: 10px;\n  margin-bottom: 15px;\n}\n\nh3.form-section {\n  margin-top: 40px;\n}\n\nh4.form-section {\n  margin-top: 20px;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.collapsed-boxes .box-body {\n  display: none;\n}\n.collapsed-boxes .box-tools {\n  display: none;\n}\n\n.sortable.sortable-dark {\n  list-style: none;\n  background-color: #d5dee9;\n}\n.sortable.sortable-dark li {\n  margin: 5px;\n}\n.sortable.sortable-dark li .box {\n  margin-bottom: 7px;\n}\n.sortable.sortable-dark li .box .box-header h3.box-title {\n  font-size: 16px;\n}\n\n.sortable.sortable-condensed li .box .form-group {\n  margin-bottom: 0;\n}\n.sortable.sortable-condensed li .box .form-group .checkbox, .sortable.sortable-condensed li .box .form-group .text {\n  margin: 0;\n}\n\n.sortable-ghost {\n  opacity: 0.7;\n  box-shadow: 0 0 23px -2px rgba(0, 129, 153, 0.7);\n}\n\n.sortable-drag {\n  opacity: 0.7;\n}\n\n.form-group .form-control-feedback {\n  pointer-events: initial;\n}\n\nform.button-form {\n  display: inline;\n}\n\n.visually-hidden {\n  opacity: 0;\n  transition: opacity 0.5s;\n}\n\n.table > tbody + tbody {\n  border-top: 1px solid #ddd;\n}\n\n.text-nowrap {\n  white-space: nowrap;\n}\n\n.no-overflow {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n/* Full calendar  */\n.fc-daygrid-event {\n  white-space: inherit;\n}\n\n.fc-daygrid-dot-event {\n  align-items: inherit;\n}\n.fc-daygrid-dot-event .fc-daygrid-event-dot {\n  margin-top: 5px;\n}\n.fc-daygrid-dot-event .fc-event-title {\n  font-weight: inherit;\n}\n\n.course-session .calendar .status-cancelled {\n  text-decoration: line-through;\n}\n\n.fc-event.fc-timegrid-event, .fc-event.fc-daygrid-event {\n  border-left-style: solid;\n  border-left-width: 6px;\n  padding-left: 4px;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUva3Vyc28vYXBwcy9rdXJzby9yZWxlYXNlcy8yMDI2MDkzMDEyNDk1My9hcHAvamF2YXNjcmlwdC9jb21wb25lbnRzL2FkbWlubHRlIiwic291cmNlcyI6WyJzdHlsZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBO0VBQ0k7RUFDQTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTs7O0FBSUo7RUFDSTtJQUNJO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztFQUdKO0lBQ0k7O0VBR0o7SUFDSTs7O0FBSVI7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7O0FBSUo7RUFDSTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJO0lBQ0k7O0VBR0o7SUFDSTs7O0FBS1I7RUFDSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7OztBQUdKO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7OztBQUdKO0VBQ0k7OztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtBQUFBO0FBRUE7RUFDSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJO0VBQ0E7OztBQUdKO0VBQ0k7OztBQUdKO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7OztBQUlKO0FBQUE7RUFFSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBOztBQUNBO0VBQ0k7RUFDQTtFQUNBOzs7QUFJUjtFQUNJO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7OztBQUdKO0VBQ0k7OztBQUlKO0VBQ0k7OztBQUlGO0VBQ0U7O0FBRUY7RUFDRTs7O0FBS0o7RUFDSTtFQUNBOztBQUNBO0VBQ0k7O0FBQ0E7RUFDSTs7QUFDQTtFQUNJOzs7QUFRWjtFQUNJOztBQUNBO0VBQ0k7OztBQUtaO0VBQ0k7RUFDQTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7QUFFQTtFQUNJOzs7QUFHSjtFQUNJOztBQUNBO0VBQ0k7O0FBRUo7RUFDSTs7O0FBSVI7RUFDSTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJcbi5kbC1zbWFsbC1ob3Jpem9udGFsIGRkOjpiZWZvcmUsIC5kbC1zbWFsbC1ob3Jpem9udGFsIGRkOjphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogdGFibGU7XG59XG5cbi5kbC1zbWFsbC1ob3Jpem9udGFsIGRkOjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG59XG5cbmRsLmRsLWhvcml6b250YWwuZGwtaG9yaXpvbnRhbC1sYXJnZSBkdCB7XG4gICAgd2lkdGg6IDMwMHB4O1xufVxuXG5kbC5kbC1ob3Jpem9udGFsLmRsLWhvcml6b250YWwtbGFyZ2UgZGQge1xuICAgIG1hcmdpbi1sZWZ0OiAzMjBweDtcbn1cblxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAuZGwtc21hbGwtaG9yaXpvbnRhbCBkdCB7XG4gICAgICAgIGNsZWFyOiBsZWZ0O1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICB3aWR0aDogMTMwcHg7XG4gICAgfVxuXG4gICAgLmRsLXNtYWxsLWhvcml6b250YWwgZGQge1xuICAgICAgICBtYXJnaW4tbGVmdDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnBhYy1jb250YWluZXIge1xuICAgICAgICB6LWluZGV4OiAxMDUxICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG50ZC5zcGFjZXIge1xuICAgIGJvcmRlci1yaWdodDogc29saWQgMXB4ICNkZGQ7XG4gICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICNkZGQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgIHdpZHRoOiA1JTtcbn1cblxudHIuc3BhY2VkX2RldGFpbCB0ZDpub3QoLnNwYWNlcikge1xuICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDtcbn1cblxudGQuc3BhY2VkLCB0aC5zcGFjZWQge1xuICAgIHdpZHRoOiA1JTtcbn1cblxuLmRyYWdnYWJsZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAzcHggMTBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xuICAgIGJvcmRlcjogdGhpbiBzb2xpZCBzaWx2ZXI7XG4gICAgY3Vyc29yOiBtb3ZlO1xuICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4IDRweCA0cHggNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweCA0cHggNHB4IDRweDtcbiAgICBwYWRkaW5nOiA2cHg7XG59XG5cbnVsLnNvcnRhYmxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtaW4taGVpZ2h0OiAzNTBweDtcbiAgICBtYXgtaGVpZ2h0OiAzNTBweDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBib3JkZXI6IHRoaW4gc29saWQgI2NjY2NjYztcbiAgICBwYWRkaW5nOiA0cHggNHB4IDRweCA0cHg7XG59XG5cbi5ncmlkIHRoIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci1sZWZ0OiB0aGluIHNvbGlkIHNpbHZlcjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxufVxuXG4uZ3JpZCB0aDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG59XG5cbi5ncmlkIHRkIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci10b3A6IHRoaW4gc29saWQgc2lsdmVyO1xuICAgIGJvcmRlci1sZWZ0OiB0aGluIHNvbGlkIHNpbHZlcjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uZ3JpZCB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG59XG5cbi5ncmlkIHRkIGltZyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAzcHg7XG59XG5cbi5ncmlkIGlucHV0LCAuZ3JpZCB0ZXh0YXJlYSB7XG4gICAgcGFkZGluZzogNXB4O1xuICAgIGJvcmRlcjogMDtcbn1cblxuLmdyaWQgLmRhdGEge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbnNwYW4ubGFiZWwtYmxvY2sge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmctdG9wOiA0cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDVweDtcbn1cblxuYm9keS5sb2FkaW5nLCBib2R5LmxvYWRpbmcgKiB7XG4gICAgY3Vyc29yOiBwcm9ncmVzcyAhaW1wb3J0YW50O1xufVxuXG4uaGFuZGxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbnRyLmhhbmRsZTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cblxuZHQuZGwtaG9yaXpvbnRhbCB7XG4gICAgcGFkZGluZzogMTgwcHggIWltcG9ydGFudDtcbn1cblxuZGQuZGwtaG9yaXpvbnRhbCB7XG4gICAgbWFyZ2luLWxlZnQ6IDIwMHB4ICFpbXBvcnRhbnQ7XG59XG5cbmRpdi5uYXYtdGFicy1jb250YWN0cyA+IHVsLm5hdi10YWJzID4gbGkgPiBhIHtcbiAgICBwYWRkaW5nOiAxMHB4O1xufVxuXG4uY29udGV4dC1tZW51IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgd2lkdGg6IGluaGVyaXQ7XG4gICAgei1pbmRleDogMTAxMDtcbn1cblxuLmNvbnRhY3Qtcm93LXByaW1hcnkge1xuICAgIHdpZHRoOiA1MHB0O1xufVxuXG4uY29udGFjdC1yb3ctYnV0dG9ucyB7XG4gICAgd2lkdGg6IDY1cHQ7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi5jb250YWN0LXJvdy1idXR0b25zIGEge1xuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuXG51bC5uYXYtc3RhY2tlZCB1bC5uYXYtc3RhY2tlZCA+IGxpID4gYSB7XG4gICAgcGFkZGluZy1sZWZ0OiA1MHB4O1xufVxuXG4ucmFkaW8taW5saW5lIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDMwcHg7XG59XG5cbi5ib3JkZXItYm90dG9tLXNoYWRvdyB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCA2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICAtbW96LWJveC1zaGFkb3c6IDAgM3B4IDZweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIGJveC1zaGFkb3c6IDAgM3B4IDZweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4uc2lkZWJhci1jb2xsYXBzZSAuY29udGVudC1oZWFkZXItZml4ZWQge1xuICAgIG1hcmdpbi1sZWZ0OiA1MHB4O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuY29udGVudC1oZWFkZXItZml4ZWQge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG5cbiAgICAubWFpbi1mb290ZXIge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG5cbn1cblxuZGwgPiBkdCB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBjb2xvcjogIzk5OTtcbn1cblxuLm1haW4tZm9vdGVyIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHJpZ2h0OiAwO1xuICAgIHotaW5kZXg6IDgwMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgLW1vei1ib3gtc2hhZG93OiAwIDNweCA2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBib3gtc2hhZG93OiAwIDNweCA2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLm1haW4tZm9vdGVyID4gLmJ0bi1ncm91cCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHRyYW5zaXRpb246IG1hcmdpbi1sZWZ0IDAuM3MgZWFzZS1pbi1vdXQgMHM7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tYWluLWZvb3RlciAuYnRuLWRlZmF1bHQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNkMGQwZDA7XG59XG5cbi5mb290ZXItdGV4dCB7XG4gICAgY29sb3I6ICM3Nzc7XG4gICAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcbn1cblxuc2VjdGlvbi5jb250ZW50IHtcbiAgICBtYXJnaW4tdG9wOiAyNTVweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbn1cblxudGFibGUudGFibGUgdGhlYWQgdGgge1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgY29sb3I6ICM5OTk7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxudGFibGUuYnVybm91dGFibGUge1xuICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG5cbmRpdi50YWJsZS1yZXNwb25zaXZlLXgge1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG59XG5cbnRhYmxlLmJ1cm5vdXRhYmxlIHRkLCB0YWJsZS5idXJub3V0YWJsZSB0aCB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICBib3JkZXI6IHRoaW4gc29saWQgI2Y0ZjRmNDtcbiAgICBib3JkZXItdG9wOiBub25lO1xufVxuXG4vKiBBIGxhYmVsIGZpbGxzIHRoZSBjZWxsLCBzbyBpdCBoYXMgdG8gY3V0IG9mZiBpdHMgb3duIHRleHQgLSB0aGUgZWxsaXBzaXMgb2YgdGhlIGNlbGwgb25seVxuICAgYXBwbGllcyB0byB0ZXh0IHRoZSBjZWxsIGhvbGRzIGl0c2VsZi4gKi9cbnRhYmxlLmJ1cm5vdXRhYmxlIHRkIHNwYW4ubGFiZWwtYmxvY2sge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbnRhYmxlLmJ1cm5vdXRhYmxlIHRib2R5IHRyOmZpcnN0LWNoaWxkLCB0YWJsZS5idXJub3V0YWJsZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCB7XG4gICAgaGVpZ2h0OiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwO1xufVxuXG50YWJsZS50YWJsZV9idXJub3V0aGVhZGVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbn1cblxudGFibGUudGFibGVfYnVybm91dGhlYWRlciB0aCB7XG4gICAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gICAgcGFkZGluZy1yaWdodDogOHB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi5idXJub3V0aGVhZGVyIHRoLmJ1cm5vdXRhYmxlLXNvcnRlZC1hc2M6OmFmdGVyLCAuYnVybm91dGhlYWRlciB0aC5idXJub3V0YWJsZS1zb3J0ZWQtZGVzYzo6YWZ0ZXIsIC5idXJub3V0aGVhZGVyIHRoLmJ1cm5vdXRhYmxlLXNvcnRhYmxlOjphZnRlciB7XG4gICAgZm9udC1mYW1pbHk6IEZvbnRBd2Vzb21lO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbn1cblxuLmJ1cm5vdXRoZWFkZXIgdGguYnVybm91dGFibGUtc29ydGVkLWFzYzo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFxcZjE2MFwiO1xufVxuXG4uYnVybm91dGhlYWRlciB0aC5idXJub3V0YWJsZS1zb3J0ZWQtZGVzYzo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFxcZjE2MVwiO1xufVxuXG4uYnVybm91dGhlYWRlciB0aC5idXJub3V0YWJsZS1zb3J0YWJsZTo6YWZ0ZXIge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICBjb250ZW50OiBcIiBcXGYwN2RcIjtcbn1cblxuLmJ1cm5vdXRoZWFkZXIgdGguYnVybm91dGFibGUtc29ydGVkLWFzYywgLmJ1cm5vdXRoZWFkZXIgdGguYnVybm91dGFibGUtc29ydGVkLWRlc2MsIC5idXJub3V0aGVhZGVyIHRoLmJ1cm5vdXRhYmxlLXNvcnRhYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmgzICsgLmRyb3Bkb3duLCBoMyArIGEge1xuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDE0cHQ7XG59XG5cbi5pbmxpbmUtYmxvY2sge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLndpZGdldCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAyMDBweDtcbiAgICBoZWlnaHQ6IDEyMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIG1hcmdpbjogMTBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiBsYXJnZTtcbiAgICBwYWRkaW5nLXRvcDogMjBweDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMnB4IDZweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIC1tb3otYm94LXNoYWRvdzogMCAycHggNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgYm94LXNoYWRvdzogMCAycHggNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG5cbi53aWRnZXQgLmZhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDEwcHg7XG4gICAgZm9udC1zaXplOiAyNXB0O1xuXG59XG5cbi5tYXN0ZXItZGV0YWlsLm1hc3Rlci1kZXRhaWwtbWFzdGVyIHVsLm5hdi5uYXYtcGlsbHMubmF2LXN0YWNrZWQgbGkuYWN0aXZlIGEsXG4ubWFzdGVyLWRldGFpbC5tYXN0ZXItZGV0YWlsLW1hc3RlciB1bC5uYXYubmF2LXBpbGxzLm5hdi1zdGFja2VkIGxpLmFjdGl2ZSBhOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MTk5O1xuICAgIGNvbG9yOiB3aGl0ZTtcbn1cblxuLm1hc3Rlci1kZXRhaWwubWFzdGVyLWRldGFpbC1tYXN0ZXIge1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDE2NXB4KTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcbiAgICBsaTpub3QoOmhvdmVyKSAubWFzdGVyLWRldGFpbC1tYXN0ZXItcmVtb3ZlIHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAzMDBtcywgb3BhY2l0eSAzMDBtcztcbiAgICB9XG59XG5cbi5tYXN0ZXItZGV0YWlsLm1hc3Rlci1kZXRhaWwtZGV0YWlsIHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxNjVweCk7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG59XG5cbi5tb2RhbCAubWFzdGVyLWRldGFpbC5tYXN0ZXItZGV0YWlsLWRldGFpbCAuYm94IHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4uYm94LWJvZHkgdGFibGUudGFibGU6Zmlyc3QtY2hpbGQgdHIgdGgge1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG59XG5cbi5ib3gtYm9keSB0YWJsZS50YWJsZTpmaXJzdC1jaGlsZCB0ciB0ZCB7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbn1cblxudGFibGUudGFibGUubWVyZ2UtdGFibGUgdGQ6bnRoLWNoaWxkKDIpIHtcbiAgICB3aWR0aDogMzUlO1xufVxuXG50YWJsZS50YWJsZS5tZXJnZS10YWJsZSB0ZDpudGgtY2hpbGQoMykge1xuICAgIHdpZHRoOiA0MHB4O1xufVxuXG50YWJsZS50YWJsZS5tZXJnZS10YWJsZSB0ZDpsYXN0LWNoaWxkIHtcbiAgICB3aWR0aDogMzUlO1xufVxuXG5pbnB1dC5yYWRpb19idXR0b25zLmlubGluZSBsYWJlbC5yYWRpbyB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4ubW9kYWwtYm9keSAubW9kYWwtYm9keS1ncmF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNmMGY1O1xuICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgbWFyZ2luOiAtMTVweCAtMTVweDtcbn1cblxuLmZvcm0tc2VjdGlvbiB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuaDMuZm9ybS1zZWN0aW9uIHtcbiAgICBtYXJnaW4tdG9wOiA0MHB4O1xufVxuXG5oNC5mb3JtLXNlY3Rpb24ge1xuICAgIG1hcmdpbi10b3A6IDIwcHg7XG59XG5cbi8vIEZpeCBoaWRkZW4gdGFnIGVsZW1lbnRcbltoaWRkZW5dIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi5jb2xsYXBzZWQtYm94ZXMge1xuICAuYm94LWJvZHkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLmJveC10b29scyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4vLyBEYXJrIGJhY2tkcm9wIHdpdGggbGlnaHQgY2FyZHMgKHZpc3VhbCBvbmx5LCBmb3JtIHNwYWNpbmcgc3RheXMgcmVndWxhcikuXG4uc29ydGFibGUuc29ydGFibGUtZGFyayB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDVkZWU5O1xuICAgIGxpIHtcbiAgICAgICAgbWFyZ2luOiA1cHg7XG4gICAgICAgIC5ib3gge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogN3B4O1xuICAgICAgICAgICAgLmJveC1oZWFkZXIgaDMuYm94LXRpdGxlIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIENvbXBhY3QgY2FyZHMgKGUuZy4gdGhlIGZsZXggZm9ybSBidWlsZGVyKTogbm8gc3BhY2luZyBiZXR3ZWVuIGZvcm0gZ3JvdXBzLlxuLnNvcnRhYmxlLnNvcnRhYmxlLWNvbmRlbnNlZCB7XG4gICAgbGkgLmJveCAuZm9ybS1ncm91cCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIC5jaGVja2JveCwgLnRleHQge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uc29ydGFibGUtZ2hvc3Qge1xuICAgIG9wYWNpdHk6IC43O1xuICAgIGJveC1zaGFkb3c6IDAgMCAyM3B4IC0ycHggcmdiYSgwLDEyOSwxNTMsMC43KVxufVxuXG4uc29ydGFibGUtZHJhZyB7XG4gICAgb3BhY2l0eTogLjc7XG59XG5cbi5mb3JtLWdyb3VwIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xufVxuXG5mb3JtLmJ1dHRvbi1mb3JtIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG59XG5cbi52aXN1YWxseS1oaWRkZW4ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNpdGlvbjpvcGFjaXR5IDAuNXM7XG59XG5cbi50YWJsZSA+IHRib2R5ICsgdGJvZHkge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xufVxuXG4udGV4dC1ub3dyYXAge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5uby1vdmVyZmxvdyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi8qIEZ1bGwgY2FsZW5kYXIgICovXG5cbi5mYy1kYXlncmlkLWV2ZW50IHtcbiAgICB3aGl0ZS1zcGFjZTogaW5oZXJpdDtcbn1cblxuLmZjLWRheWdyaWQtZG90LWV2ZW50IHtcbiAgICBhbGlnbi1pdGVtczogaW5oZXJpdDtcbiAgICAuZmMtZGF5Z3JpZC1ldmVudC1kb3Qge1xuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgfVxuICAgIC5mYy1ldmVudC10aXRsZSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0O1xuICAgIH1cbn1cblxuLmNvdXJzZS1zZXNzaW9uIC5jYWxlbmRhciAuc3RhdHVzLWNhbmNlbGxlZCB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG59XG5cbi5mYy1ldmVudC5mYy10aW1lZ3JpZC1ldmVudCwgLmZjLWV2ZW50LmZjLWRheWdyaWQtZXZlbnQge1xuICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItbGVmdC13aWR0aDogNnB4O1xuICAgIHBhZGRpbmctbGVmdDogNHB4O1xufSJdfQ== */", "/*\n * Skin: Blue\n * ----------\n */\n.skin-blue .main-header .navbar {\n  background-color: #008199;\n}\n.skin-blue .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .nav > li > a:hover,\n.skin-blue .main-header .navbar .nav > li > a:active,\n.skin-blue .main-header .navbar .nav > li > a:focus,\n.skin-blue .main-header .navbar .nav .open > a,\n.skin-blue .main-header .navbar .nav .open > a:hover,\n.skin-blue .main-header .navbar .nav .open > a:focus,\n.skin-blue .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  background-color: #006b80;\n}\n@media (max-width: 767px) {\n  .skin-blue .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a:hover {\n    background: #006b80;\n  }\n}\n.skin-blue .main-header .logo {\n  background-color: #006b80;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue .main-header .logo:hover {\n  background-color: #00677a;\n}\n.skin-blue .main-header li.user-header {\n  background-color: #008199;\n}\n.skin-blue .content-header {\n  background: transparent;\n}\n.skin-blue .wrapper,\n.skin-blue .main-sidebar,\n.skin-blue .left-side {\n  background-color: #222d32;\n}\n.skin-blue .user-panel > .info,\n.skin-blue .user-panel > .info > a {\n  color: #fff;\n}\n.skin-blue .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-blue .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-blue .sidebar-menu > li:hover > a,\n.skin-blue .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #008199;\n}\n.skin-blue .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-blue .sidebar a {\n  color: #b8c7ce;\n}\n.skin-blue .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue .treeview-menu > li > a {\n  color: #c7d3d9;\n}\n.skin-blue .treeview-menu > li.active > a,\n.skin-blue .treeview-menu > li > a:hover {\n  color: #ffffff;\n  font-weight: bold;\n}\n.skin-blue .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #607f8d;\n  margin: 10px 10px;\n}\n.skin-blue .sidebar-form input[type=\"text\"],\n.skin-blue .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-blue .sidebar-form input[type=\"text\"] {\n  color: #c7d3d9;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus,\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #008199;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #007d94;\n}\n", "/*\n * Skin: Blue\n * ----------\n */\n.skin-blue-light .main-header .navbar,\n.skin-blue-light .main-footer .navbar {\n  background-color: #008199;\n}\n.skin-blue-light .main-header .navbar .nav > li > a,\n.skin-blue-light .main-footer .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .nav > li > a:hover,\n.skin-blue-light .main-footer .navbar .nav > li > a:hover,\n.skin-blue-light .main-header .navbar .nav > li > a:active,\n.skin-blue-light .main-footer .navbar .nav > li > a:active,\n.skin-blue-light .main-header .navbar .nav > li > a:focus,\n.skin-blue-light .main-footer .navbar .nav > li > a:focus,\n.skin-blue-light .main-header .navbar .nav .open > a,\n.skin-blue-light .main-footer .navbar .nav .open > a,\n.skin-blue-light .main-header .navbar .nav .open > a:hover,\n.skin-blue-light .main-footer .navbar .nav .open > a:hover,\n.skin-blue-light .main-header .navbar .nav .open > a:focus,\n.skin-blue-light .main-footer .navbar .nav .open > a:focus,\n.skin-blue-light .main-header .navbar .nav > .active > a,\n.skin-blue-light .main-footer .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle,\n.skin-blue-light .main-footer .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover,\n.skin-blue-light .main-footer .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle,\n.skin-blue-light .main-footer .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover,\n.skin-blue-light .main-footer .navbar .sidebar-toggle:hover {\n  background-color: #006b80;\n}\n@media (max-width: 767px) {\n  .skin-blue-light .main-header .navbar .dropdown-menu li.divider,\n  .skin-blue-light .main-footer .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a,\n  .skin-blue-light .main-footer .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a:hover,\n  .skin-blue-light .main-footer .navbar .dropdown-menu li a:hover {\n    background: #006b80;\n  }\n}\n.skin-blue-light .main-header .logo,\n.skin-blue-light .main-footer .logo {\n  background-color: #008199;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue-light .main-header .logo:hover,\n.skin-blue-light .main-footer .logo:hover {\n  background-color: #007d94;\n}\n.skin-blue-light .main-header li.user-header,\n.skin-blue-light .main-footer li.user-header {\n  background-color: #008199;\n}\n.skin-blue-light .content-header {\n  background: transparent;\n}\n.skin-blue-light .wrapper,\n.skin-blue-light .main-sidebar,\n.skin-blue-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-blue-light .content-wrapper,\n.skin-blue-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-blue-light .user-panel > .info,\n.skin-blue-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-blue-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-blue-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-blue-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li:hover > a,\n.skin-blue-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar-menu > li.active {\n  border-left-color: #008199;\n}\n.skin-blue-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar a {\n  color: #444444;\n}\n.skin-blue-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-blue-light .treeview-menu > li.active > a,\n.skin-blue-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-blue-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"],\n.skin-blue-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus,\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n.skin-blue-light .main-footer {\n  border-top-color: #d2d6de;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #008199;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #007d94;\n}\n", "/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .nav > li > a:hover,\n.skin-yellow .main-header .navbar .nav > li > a:active,\n.skin-yellow .main-header .navbar .nav > li > a:focus,\n.skin-yellow .main-header .navbar .nav .open > a,\n.skin-yellow .main-header .navbar .nav .open > a:hover,\n.skin-yellow .main-header .navbar .nav .open > a:focus,\n.skin-yellow .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow .main-header .logo {\n  background-color: #e08e0b;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow .main-header .logo:hover {\n  background-color: #db8b0b;\n}\n.skin-yellow .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow .content-header {\n  background: transparent;\n}\n.skin-yellow .wrapper,\n.skin-yellow .main-sidebar,\n.skin-yellow .left-side {\n  background-color: #222d32;\n}\n.skin-yellow .user-panel > .info,\n.skin-yellow .user-panel > .info > a {\n  color: #fff;\n}\n.skin-yellow .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-yellow .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-yellow .sidebar-menu > li:hover > a,\n.skin-yellow .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #f39c12;\n}\n.skin-yellow .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-yellow .sidebar a {\n  color: #b8c7ce;\n}\n.skin-yellow .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow .treeview-menu > li > a {\n  color: #c7d3d9;\n}\n.skin-yellow .treeview-menu > li.active > a,\n.skin-yellow .treeview-menu > li > a:hover {\n  color: #ffffff;\n  font-weight: bold;\n}\n.skin-yellow .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #607f8d;\n  margin: 10px 10px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"],\n.skin-yellow .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-yellow .sidebar-form input[type=\"text\"] {\n  color: #c7d3d9;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n", "/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow-light .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a:hover,\n.skin-yellow-light .main-header .navbar .nav > li > a:active,\n.skin-yellow-light .main-header .navbar .nav > li > a:focus,\n.skin-yellow-light .main-header .navbar .nav .open > a,\n.skin-yellow-light .main-header .navbar .nav .open > a:hover,\n.skin-yellow-light .main-header .navbar .nav .open > a:focus,\n.skin-yellow-light .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow-light .main-header .logo {\n  background-color: #f39c12;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow-light .main-header .logo:hover {\n  background-color: #f39a0d;\n}\n.skin-yellow-light .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow-light .content-header {\n  background: transparent;\n}\n.skin-yellow-light .wrapper,\n.skin-yellow-light .main-sidebar,\n.skin-yellow-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-yellow-light .content-wrapper,\n.skin-yellow-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-yellow-light .user-panel > .info,\n.skin-yellow-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-yellow-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-yellow-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li:hover > a,\n.skin-yellow-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar-menu > li.active {\n  border-left-color: #f39c12;\n}\n.skin-yellow-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-yellow-light .treeview-menu > li.active > a,\n.skin-yellow-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-yellow-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"],\n.skin-yellow-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n", "#search-backdrop {\n    filter: alpha(opacity=50);\n    opacity: 0.5;\n    -moz-Opacity: 0.5;\n    z-index: 100;\n}\n\n#search-results {\n    z-index: 1000;\n\n    position: absolute;\n    left: 11px;\n    max-width: 600px;\n    top: 94px;\n    display: block;\n    padding: 3px;\n    /* width: 400px; */\n    -moz-border-radius:0px 0px 4px 4px;\n    border-radius: 0px 0px 4px 4px;\n    float: left;\n\n    -webkit-box-shadow: 5px 5px 6px 2px rgba(0, 0, 0, 0.1);\n    -moz-box-shadow: 5px 5px 6px 2px rgba(0, 0, 0, 0.1);\n    box-shadow: 5px 5px 6px 2px rgba(0, 0, 0, 0.1);\n\n    overflow-y: auto;\n    max-height: calc(100vh - 100px)\n\n}\n", "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\\f000\"}.fa-music:before{content:\"\\f001\"}.fa-search:before{content:\"\\f002\"}.fa-envelope-o:before{content:\"\\f003\"}.fa-heart:before{content:\"\\f004\"}.fa-star:before{content:\"\\f005\"}.fa-star-o:before{content:\"\\f006\"}.fa-user:before{content:\"\\f007\"}.fa-film:before{content:\"\\f008\"}.fa-th-large:before{content:\"\\f009\"}.fa-th:before{content:\"\\f00a\"}.fa-th-list:before{content:\"\\f00b\"}.fa-check:before{content:\"\\f00c\"}.fa-remove:before,.fa-close:before,.fa-times:before{content:\"\\f00d\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-search-minus:before{content:\"\\f010\"}.fa-power-off:before{content:\"\\f011\"}.fa-signal:before{content:\"\\f012\"}.fa-gear:before,.fa-cog:before{content:\"\\f013\"}.fa-trash-o:before{content:\"\\f014\"}.fa-home:before{content:\"\\f015\"}.fa-file-o:before{content:\"\\f016\"}.fa-clock-o:before{content:\"\\f017\"}.fa-road:before{content:\"\\f018\"}.fa-download:before{content:\"\\f019\"}.fa-arrow-circle-o-down:before{content:\"\\f01a\"}.fa-arrow-circle-o-up:before{content:\"\\f01b\"}.fa-inbox:before{content:\"\\f01c\"}.fa-play-circle-o:before{content:\"\\f01d\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\\f01e\"}.fa-refresh:before{content:\"\\f021\"}.fa-list-alt:before{content:\"\\f022\"}.fa-lock:before{content:\"\\f023\"}.fa-flag:before{content:\"\\f024\"}.fa-headphones:before{content:\"\\f025\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-up:before{content:\"\\f028\"}.fa-qrcode:before{content:\"\\f029\"}.fa-barcode:before{content:\"\\f02a\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-book:before{content:\"\\f02d\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-print:before{content:\"\\f02f\"}.fa-camera:before{content:\"\\f030\"}.fa-font:before{content:\"\\f031\"}.fa-bold:before{content:\"\\f032\"}.fa-italic:before{content:\"\\f033\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-right:before{content:\"\\f038\"}.fa-align-justify:before{content:\"\\f039\"}.fa-list:before{content:\"\\f03a\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-indent:before{content:\"\\f03c\"}.fa-video-camera:before{content:\"\\f03d\"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:\"\\f03e\"}.fa-pencil:before{content:\"\\f040\"}.fa-map-marker:before{content:\"\\f041\"}.fa-adjust:before{content:\"\\f042\"}.fa-tint:before{content:\"\\f043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\f044\"}.fa-share-square-o:before{content:\"\\f045\"}.fa-check-square-o:before{content:\"\\f046\"}.fa-arrows:before{content:\"\\f047\"}.fa-step-backward:before{content:\"\\f048\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-backward:before{content:\"\\f04a\"}.fa-play:before{content:\"\\f04b\"}.fa-pause:before{content:\"\\f04c\"}.fa-stop:before{content:\"\\f04d\"}.fa-forward:before{content:\"\\f04e\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-step-forward:before{content:\"\\f051\"}.fa-eject:before{content:\"\\f052\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-times-circle:before{content:\"\\f057\"}.fa-check-circle:before{content:\"\\f058\"}.fa-question-circle:before{content:\"\\f059\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-times-circle-o:before{content:\"\\f05c\"}.fa-check-circle-o:before{content:\"\\f05d\"}.fa-ban:before{content:\"\\f05e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-expand:before{content:\"\\f065\"}.fa-compress:before{content:\"\\f066\"}.fa-plus:before{content:\"\\f067\"}.fa-minus:before{content:\"\\f068\"}.fa-asterisk:before{content:\"\\f069\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-gift:before{content:\"\\f06b\"}.fa-leaf:before{content:\"\\f06c\"}.fa-fire:before{content:\"\\f06d\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\\f071\"}.fa-plane:before{content:\"\\f072\"}.fa-calendar:before{content:\"\\f073\"}.fa-random:before{content:\"\\f074\"}.fa-comment:before{content:\"\\f075\"}.fa-magnet:before{content:\"\\f076\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-retweet:before{content:\"\\f079\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-arrows-v:before{content:\"\\f07d\"}.fa-arrows-h:before{content:\"\\f07e\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\\f080\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-key:before{content:\"\\f084\"}.fa-gears:before,.fa-cogs:before{content:\"\\f085\"}.fa-comments:before{content:\"\\f086\"}.fa-thumbs-o-up:before{content:\"\\f087\"}.fa-thumbs-o-down:before{content:\"\\f088\"}.fa-star-half:before{content:\"\\f089\"}.fa-heart-o:before{content:\"\\f08a\"}.fa-sign-out:before{content:\"\\f08b\"}.fa-linkedin-square:before{content:\"\\f08c\"}.fa-thumb-tack:before{content:\"\\f08d\"}.fa-external-link:before{content:\"\\f08e\"}.fa-sign-in:before{content:\"\\f090\"}.fa-trophy:before{content:\"\\f091\"}.fa-github-square:before{content:\"\\f092\"}.fa-upload:before{content:\"\\f093\"}.fa-lemon-o:before{content:\"\\f094\"}.fa-phone:before{content:\"\\f095\"}.fa-square-o:before{content:\"\\f096\"}.fa-bookmark-o:before{content:\"\\f097\"}.fa-phone-square:before{content:\"\\f098\"}.fa-twitter:before{content:\"\\f099\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\\f09a\"}.fa-github:before{content:\"\\f09b\"}.fa-unlock:before{content:\"\\f09c\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-feed:before,.fa-rss:before{content:\"\\f09e\"}.fa-hdd-o:before{content:\"\\f0a0\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bell:before{content:\"\\f0f3\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-hand-o-right:before{content:\"\\f0a4\"}.fa-hand-o-left:before{content:\"\\f0a5\"}.fa-hand-o-up:before{content:\"\\f0a6\"}.fa-hand-o-down:before{content:\"\\f0a7\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-globe:before{content:\"\\f0ac\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-filter:before{content:\"\\f0b0\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-group:before,.fa-users:before{content:\"\\f0c0\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-flask:before{content:\"\\f0c3\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-copy:before,.fa-files-o:before{content:\"\\f0c5\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-save:before,.fa-floppy-o:before{content:\"\\f0c7\"}.fa-square:before{content:\"\\f0c8\"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:\"\\f0c9\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-underline:before{content:\"\\f0cd\"}.fa-table:before{content:\"\\f0ce\"}.fa-magic:before{content:\"\\f0d0\"}.fa-truck:before{content:\"\\f0d1\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-plus:before{content:\"\\f0d5\"}.fa-money:before{content:\"\\f0d6\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-columns:before{content:\"\\f0db\"}.fa-unsorted:before,.fa-sort:before{content:\"\\f0dc\"}.fa-sort-down:before,.fa-sort-desc:before{content:\"\\f0dd\"}.fa-sort-up:before,.fa-sort-asc:before{content:\"\\f0de\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-linkedin:before{content:\"\\f0e1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-legal:before,.fa-gavel:before{content:\"\\f0e3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\f0e4\"}.fa-comment-o:before{content:\"\\f0e5\"}.fa-comments-o:before{content:\"\\f0e6\"}.fa-flash:before,.fa-bolt:before{content:\"\\f0e7\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-paste:before,.fa-clipboard:before{content:\"\\f0ea\"}.fa-lightbulb-o:before{content:\"\\f0eb\"}.fa-exchange:before{content:\"\\f0ec\"}.fa-cloud-download:before{content:\"\\f0ed\"}.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-bell-o:before{content:\"\\f0a2\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cutlery:before{content:\"\\f0f5\"}.fa-file-text-o:before{content:\"\\f0f6\"}.fa-building-o:before{content:\"\\f0f7\"}.fa-hospital-o:before{content:\"\\f0f8\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-beer:before{content:\"\\f0fc\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angle-down:before{content:\"\\f107\"}.fa-desktop:before{content:\"\\f108\"}.fa-laptop:before{content:\"\\f109\"}.fa-tablet:before{content:\"\\f10a\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f10b\"}.fa-circle-o:before{content:\"\\f10c\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-spinner:before{content:\"\\f110\"}.fa-circle:before{content:\"\\f111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f112\"}.fa-github-alt:before{content:\"\\f113\"}.fa-folder-o:before{content:\"\\f114\"}.fa-folder-open-o:before{content:\"\\f115\"}.fa-smile-o:before{content:\"\\f118\"}.fa-frown-o:before{content:\"\\f119\"}.fa-meh-o:before{content:\"\\f11a\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-keyboard-o:before{content:\"\\f11c\"}.fa-flag-o:before{content:\"\\f11d\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-terminal:before{content:\"\\f120\"}.fa-code:before{content:\"\\f121\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\f122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\f123\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-crop:before{content:\"\\f125\"}.fa-code-fork:before{content:\"\\f126\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\\f127\"}.fa-question:before{content:\"\\f128\"}.fa-info:before{content:\"\\f129\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-superscript:before{content:\"\\f12b\"}.fa-subscript:before{content:\"\\f12c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-shield:before{content:\"\\f132\"}.fa-calendar-o:before{content:\"\\f133\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-rocket:before{content:\"\\f135\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-html5:before{content:\"\\f13b\"}.fa-css3:before{content:\"\\f13c\"}.fa-anchor:before{content:\"\\f13d\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-bullseye:before{content:\"\\f140\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-rss-square:before{content:\"\\f143\"}.fa-play-circle:before{content:\"\\f144\"}.fa-ticket:before{content:\"\\f145\"}.fa-minus-square:before{content:\"\\f146\"}.fa-minus-square-o:before{content:\"\\f147\"}.fa-level-up:before{content:\"\\f148\"}.fa-level-down:before{content:\"\\f149\"}.fa-check-square:before{content:\"\\f14a\"}.fa-pencil-square:before{content:\"\\f14b\"}.fa-external-link-square:before{content:\"\\f14c\"}.fa-share-square:before{content:\"\\f14d\"}.fa-compass:before{content:\"\\f14e\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\\f150\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\\f151\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\\f152\"}.fa-euro:before,.fa-eur:before{content:\"\\f153\"}.fa-gbp:before{content:\"\\f154\"}.fa-dollar:before,.fa-usd:before{content:\"\\f155\"}.fa-rupee:before,.fa-inr:before{content:\"\\f156\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\\f157\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\\f158\"}.fa-won:before,.fa-krw:before{content:\"\\f159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\f15a\"}.fa-file:before{content:\"\\f15b\"}.fa-file-text:before{content:\"\\f15c\"}.fa-sort-alpha-asc:before{content:\"\\f15d\"}.fa-sort-alpha-desc:before{content:\"\\f15e\"}.fa-sort-amount-asc:before{content:\"\\f160\"}.fa-sort-amount-desc:before{content:\"\\f161\"}.fa-sort-numeric-asc:before{content:\"\\f162\"}.fa-sort-numeric-desc:before{content:\"\\f163\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-youtube-square:before{content:\"\\f166\"}.fa-youtube:before{content:\"\\f167\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-youtube-play:before{content:\"\\f16a\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-instagram:before{content:\"\\f16d\"}.fa-flickr:before{content:\"\\f16e\"}.fa-adn:before{content:\"\\f170\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitbucket-square:before{content:\"\\f172\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-long-arrow-down:before{content:\"\\f175\"}.fa-long-arrow-up:before{content:\"\\f176\"}.fa-long-arrow-left:before{content:\"\\f177\"}.fa-long-arrow-right:before{content:\"\\f178\"}.fa-apple:before{content:\"\\f179\"}.fa-windows:before{content:\"\\f17a\"}.fa-android:before{content:\"\\f17b\"}.fa-linux:before{content:\"\\f17c\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-skype:before{content:\"\\f17e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-trello:before{content:\"\\f181\"}.fa-female:before{content:\"\\f182\"}.fa-male:before{content:\"\\f183\"}.fa-gittip:before,.fa-gratipay:before{content:\"\\f184\"}.fa-sun-o:before{content:\"\\f185\"}.fa-moon-o:before{content:\"\\f186\"}.fa-archive:before{content:\"\\f187\"}.fa-bug:before{content:\"\\f188\"}.fa-vk:before{content:\"\\f189\"}.fa-weibo:before{content:\"\\f18a\"}.fa-renren:before{content:\"\\f18b\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-arrow-circle-o-right:before{content:\"\\f18e\"}.fa-arrow-circle-o-left:before{content:\"\\f190\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\\f191\"}.fa-dot-circle-o:before{content:\"\\f192\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-turkish-lira:before,.fa-try:before{content:\"\\f195\"}.fa-plus-square-o:before{content:\"\\f196\"}.fa-space-shuttle:before{content:\"\\f197\"}.fa-slack:before{content:\"\\f198\"}.fa-envelope-square:before{content:\"\\f199\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-openid:before{content:\"\\f19b\"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:\"\\f19c\"}.fa-mortar-board:before,.fa-graduation-cap:before{content:\"\\f19d\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-google:before{content:\"\\f1a0\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-reddit-square:before{content:\"\\f1a2\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-digg:before{content:\"\\f1a6\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-language:before{content:\"\\f1ab\"}.fa-fax:before{content:\"\\f1ac\"}.fa-building:before{content:\"\\f1ad\"}.fa-child:before{content:\"\\f1ae\"}.fa-paw:before{content:\"\\f1b0\"}.fa-spoon:before{content:\"\\f1b1\"}.fa-cube:before{content:\"\\f1b2\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-behance:before{content:\"\\f1b4\"}.fa-behance-square:before{content:\"\\f1b5\"}.fa-steam:before{content:\"\\f1b6\"}.fa-steam-square:before{content:\"\\f1b7\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-automobile:before,.fa-car:before{content:\"\\f1b9\"}.fa-cab:before,.fa-taxi:before{content:\"\\f1ba\"}.fa-tree:before{content:\"\\f1bb\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-database:before{content:\"\\f1c0\"}.fa-file-pdf-o:before{content:\"\\f1c1\"}.fa-file-word-o:before{content:\"\\f1c2\"}.fa-file-excel-o:before{content:\"\\f1c3\"}.fa-file-powerpoint-o:before{content:\"\\f1c4\"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:\"\\f1c5\"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:\"\\f1c6\"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:\"\\f1c7\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\\f1c8\"}.fa-file-code-o:before{content:\"\\f1c9\"}.fa-vine:before{content:\"\\f1ca\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:\"\\f1cd\"}.fa-circle-o-notch:before{content:\"\\f1ce\"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:\"\\f1d0\"}.fa-ge:before,.fa-empire:before{content:\"\\f1d1\"}.fa-git-square:before{content:\"\\f1d2\"}.fa-git:before{content:\"\\f1d3\"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:\"\\f1d4\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-qq:before{content:\"\\f1d6\"}.fa-wechat:before,.fa-weixin:before{content:\"\\f1d7\"}.fa-send:before,.fa-paper-plane:before{content:\"\\f1d8\"}.fa-send-o:before,.fa-paper-plane-o:before{content:\"\\f1d9\"}.fa-history:before{content:\"\\f1da\"}.fa-circle-thin:before{content:\"\\f1db\"}.fa-header:before{content:\"\\f1dc\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-sliders:before{content:\"\\f1de\"}.fa-share-alt:before{content:\"\\f1e0\"}.fa-share-alt-square:before{content:\"\\f1e1\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:\"\\f1e3\"}.fa-tty:before{content:\"\\f1e4\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-plug:before{content:\"\\f1e6\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-newspaper-o:before{content:\"\\f1ea\"}.fa-wifi:before{content:\"\\f1eb\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-bell-slash-o:before{content:\"\\f1f7\"}.fa-trash:before{content:\"\\f1f8\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-at:before{content:\"\\f1fa\"}.fa-eyedropper:before{content:\"\\f1fb\"}.fa-paint-brush:before{content:\"\\f1fc\"}.fa-birthday-cake:before{content:\"\\f1fd\"}.fa-area-chart:before{content:\"\\f1fe\"}.fa-pie-chart:before{content:\"\\f200\"}.fa-line-chart:before{content:\"\\f201\"}.fa-lastfm:before{content:\"\\f202\"}.fa-lastfm-square:before{content:\"\\f203\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-bicycle:before{content:\"\\f206\"}.fa-bus:before{content:\"\\f207\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-angellist:before{content:\"\\f209\"}.fa-cc:before{content:\"\\f20a\"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:\"\\f20b\"}.fa-meanpath:before{content:\"\\f20c\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-dashcube:before{content:\"\\f210\"}.fa-forumbee:before{content:\"\\f211\"}.fa-leanpub:before{content:\"\\f212\"}.fa-sellsy:before{content:\"\\f213\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-diamond:before{content:\"\\f219\"}.fa-ship:before{content:\"\\f21a\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-street-view:before{content:\"\\f21d\"}.fa-heartbeat:before{content:\"\\f21e\"}.fa-venus:before{content:\"\\f221\"}.fa-mars:before{content:\"\\f222\"}.fa-mercury:before{content:\"\\f223\"}.fa-intersex:before,.fa-transgender:before{content:\"\\f224\"}.fa-transgender-alt:before{content:\"\\f225\"}.fa-venus-double:before{content:\"\\f226\"}.fa-mars-double:before{content:\"\\f227\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-mars-stroke-h:before{content:\"\\f22b\"}.fa-neuter:before{content:\"\\f22c\"}.fa-genderless:before{content:\"\\f22d\"}.fa-facebook-official:before{content:\"\\f230\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-server:before{content:\"\\f233\"}.fa-user-plus:before{content:\"\\f234\"}.fa-user-times:before{content:\"\\f235\"}.fa-hotel:before,.fa-bed:before{content:\"\\f236\"}.fa-viacoin:before{content:\"\\f237\"}.fa-train:before{content:\"\\f238\"}.fa-subway:before{content:\"\\f239\"}.fa-medium:before{content:\"\\f23a\"}.fa-yc:before,.fa-y-combinator:before{content:\"\\f23b\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-opencart:before{content:\"\\f23d\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:\"\\f240\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\\f242\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\\f243\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\f244\"}.fa-mouse-pointer:before{content:\"\\f245\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-object-group:before{content:\"\\f247\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-sticky-note:before{content:\"\\f249\"}.fa-sticky-note-o:before{content:\"\\f24a\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-clone:before{content:\"\\f24d\"}.fa-balance-scale:before{content:\"\\f24e\"}.fa-hourglass-o:before{content:\"\\f250\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\f251\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\f252\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\f253\"}.fa-hourglass:before{content:\"\\f254\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\\f255\"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:\"\\f256\"}.fa-hand-scissors-o:before{content:\"\\f257\"}.fa-hand-lizard-o:before{content:\"\\f258\"}.fa-hand-spock-o:before{content:\"\\f259\"}.fa-hand-pointer-o:before{content:\"\\f25a\"}.fa-hand-peace-o:before{content:\"\\f25b\"}.fa-trademark:before{content:\"\\f25c\"}.fa-registered:before{content:\"\\f25d\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-gg:before{content:\"\\f260\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-tripadvisor:before{content:\"\\f262\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-odnoklassniki-square:before{content:\"\\f264\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-safari:before{content:\"\\f267\"}.fa-chrome:before{content:\"\\f268\"}.fa-firefox:before{content:\"\\f269\"}.fa-opera:before{content:\"\\f26a\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-tv:before,.fa-television:before{content:\"\\f26c\"}.fa-contao:before{content:\"\\f26d\"}.fa-500px:before{content:\"\\f26e\"}.fa-amazon:before{content:\"\\f270\"}.fa-calendar-plus-o:before{content:\"\\f271\"}.fa-calendar-minus-o:before{content:\"\\f272\"}.fa-calendar-times-o:before{content:\"\\f273\"}.fa-calendar-check-o:before{content:\"\\f274\"}.fa-industry:before{content:\"\\f275\"}.fa-map-pin:before{content:\"\\f276\"}.fa-map-signs:before{content:\"\\f277\"}.fa-map-o:before{content:\"\\f278\"}.fa-map:before{content:\"\\f279\"}.fa-commenting:before{content:\"\\f27a\"}.fa-commenting-o:before{content:\"\\f27b\"}.fa-houzz:before{content:\"\\f27c\"}.fa-vimeo:before{content:\"\\f27d\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-fonticons:before{content:\"\\f280\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-edge:before{content:\"\\f282\"}.fa-credit-card-alt:before{content:\"\\f283\"}.fa-codiepie:before{content:\"\\f284\"}.fa-modx:before{content:\"\\f285\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-usb:before{content:\"\\f287\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-scribd:before{content:\"\\f28a\"}.fa-pause-circle:before{content:\"\\f28b\"}.fa-pause-circle-o:before{content:\"\\f28c\"}.fa-stop-circle:before{content:\"\\f28d\"}.fa-stop-circle-o:before{content:\"\\f28e\"}.fa-shopping-bag:before{content:\"\\f290\"}.fa-shopping-basket:before{content:\"\\f291\"}.fa-hashtag:before{content:\"\\f292\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-percent:before{content:\"\\f295\"}.fa-gitlab:before{content:\"\\f296\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-wpforms:before{content:\"\\f298\"}.fa-envira:before{content:\"\\f299\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-wheelchair-alt:before{content:\"\\f29b\"}.fa-question-circle-o:before{content:\"\\f29c\"}.fa-blind:before{content:\"\\f29d\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-volume-control-phone:before{content:\"\\f2a0\"}.fa-braille:before{content:\"\\f2a1\"}.fa-assistive-listening-systems:before{content:\"\\f2a2\"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:\"\\f2a3\"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:\"\\f2a4\"}.fa-glide:before{content:\"\\f2a5\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-signing:before,.fa-sign-language:before{content:\"\\f2a7\"}.fa-low-vision:before{content:\"\\f2a8\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-snapchat:before{content:\"\\f2ab\"}.fa-snapchat-ghost:before{content:\"\\f2ac\"}.fa-snapchat-square:before{content:\"\\f2ad\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:\"\\f2b3\"}.fa-fa:before,.fa-font-awesome:before{content:\"\\f2b4\"}.fa-handshake-o:before{content:\"\\f2b5\"}.fa-envelope-open:before{content:\"\\f2b6\"}.fa-envelope-open-o:before{content:\"\\f2b7\"}.fa-linode:before{content:\"\\f2b8\"}.fa-address-book:before{content:\"\\f2b9\"}.fa-address-book-o:before{content:\"\\f2ba\"}.fa-vcard:before,.fa-address-card:before{content:\"\\f2bb\"}.fa-vcard-o:before,.fa-address-card-o:before{content:\"\\f2bc\"}.fa-user-circle:before{content:\"\\f2bd\"}.fa-user-circle-o:before{content:\"\\f2be\"}.fa-user-o:before{content:\"\\f2c0\"}.fa-id-badge:before{content:\"\\f2c1\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\\f2c2\"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:\"\\f2c3\"}.fa-quora:before{content:\"\\f2c4\"}.fa-free-code-camp:before{content:\"\\f2c5\"}.fa-telegram:before{content:\"\\f2c6\"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:\"\\f2c7\"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\\f2c8\"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\\f2c9\"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\\f2ca\"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\\f2cb\"}.fa-shower:before{content:\"\\f2cc\"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:\"\\f2cd\"}.fa-podcast:before{content:\"\\f2ce\"}.fa-window-maximize:before{content:\"\\f2d0\"}.fa-window-minimize:before{content:\"\\f2d1\"}.fa-window-restore:before{content:\"\\f2d2\"}.fa-times-rectangle:before,.fa-window-close:before{content:\"\\f2d3\"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:\"\\f2d4\"}.fa-bandcamp:before{content:\"\\f2d5\"}.fa-grav:before{content:\"\\f2d6\"}.fa-etsy:before{content:\"\\f2d7\"}.fa-imdb:before{content:\"\\f2d8\"}.fa-ravelry:before{content:\"\\f2d9\"}.fa-eercast:before{content:\"\\f2da\"}.fa-microchip:before{content:\"\\f2db\"}.fa-snowflake-o:before{content:\"\\f2dc\"}.fa-superpowers:before{content:\"\\f2dd\"}.fa-wpexplorer:before{content:\"\\f2de\"}.fa-meetup:before{content:\"\\f2e0\"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}\n", "import './adminlte'\nimport './adminlte.css'\nimport './style.scss'\nimport './skin-blue.css'\nimport './skin-blue-light.css'\nimport './skin-yellow.css'\nimport './skin-yellow-light.css'\nimport './search.css'\nimport 'font-awesome/css/font-awesome.min.css'\n", "@font-face {\n  font-family: 'Source Sans Pro';\n  font-weight: 300;\n  font-style: normal;\n  src: url('Source-Sans-Pro-300/Source-Sans-Pro-300.eot');\n  src: url('Source-Sans-Pro-300/Source-Sans-Pro-300.eot?#iefix') format('embedded-opentype'),\n  local('Source Sans Pro Light'),\n  local('Source-Sans-Pro-300'),\n  url('Source-Sans-Pro-300/Source-Sans-Pro-300.woff2') format('woff2'),\n  url('Source-Sans-Pro-300/Source-Sans-Pro-300.woff') format('woff'),\n  url('Source-Sans-Pro-300/Source-Sans-Pro-300.ttf') format('truetype'),\n  url('Source-Sans-Pro-300/Source-Sans-Pro-300.svg#SourceSansPro') format('svg');\n}\n\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-weight: 400;\n  font-style: normal;\n  src: url('Source-Sans-Pro-regular/Source-Sans-Pro-regular.eot');\n  src: url('Source-Sans-Pro-regular/Source-Sans-Pro-regular.eot?#iefix') format('embedded-opentype'),\n  local('Source Sans Pro'),\n  local('Source-Sans-Pro-regular'),\n  url('Source-Sans-Pro-regular/Source-Sans-Pro-regular.woff2') format('woff2'),\n  url('Source-Sans-Pro-regular/Source-Sans-Pro-regular.woff') format('woff'),\n  url('Source-Sans-Pro-regular/Source-Sans-Pro-regular.ttf') format('truetype'),\n  url('Source-Sans-Pro-regular/Source-Sans-Pro-regular.svg#SourceSansPro') format('svg');\n}\n\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-weight: 600;\n  font-style: normal;\n  src: url('Source-Sans-Pro-600/Source-Sans-Pro-600.eot');\n  src: url('Source-Sans-Pro-600/Source-Sans-Pro-600.eot?#iefix') format('embedded-opentype'),\n  local('Source Sans Pro Semibold'),\n  local('Source-Sans-Pro-600'),\n  url('Source-Sans-Pro-600/Source-Sans-Pro-600.woff2') format('woff2'),\n  url('Source-Sans-Pro-600/Source-Sans-Pro-600.woff') format('woff'),\n  url('Source-Sans-Pro-600/Source-Sans-Pro-600.ttf') format('truetype'),\n  url('Source-Sans-Pro-600/Source-Sans-Pro-600.svg#SourceSansPro') format('svg');\n}\n\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-weight: 700;\n  font-style: normal;\n  src: url('Source-Sans-Pro-700/Source-Sans-Pro-700.eot');\n  src: url('Source-Sans-Pro-700/Source-Sans-Pro-700.eot?#iefix') format('embedded-opentype'),\n  local('Source Sans Pro Bold'),\n  local('Source-Sans-Pro-700'),\n  url('Source-Sans-Pro-700/Source-Sans-Pro-700.woff2') format('woff2'),\n  url('Source-Sans-Pro-700/Source-Sans-Pro-700.woff') format('woff'),\n  url('Source-Sans-Pro-700/Source-Sans-Pro-700.ttf') format('truetype'),\n  url('Source-Sans-Pro-700/Source-Sans-Pro-700.svg#SourceSansPro') format('svg');\n}\n\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-weight: 300;\n  font-style: italic;\n  src: url('Source-Sans-Pro-300italic/Source-Sans-Pro-300italic.eot');\n  src: url('Source-Sans-Pro-300italic/Source-Sans-Pro-300italic.eot?#iefix') format('embedded-opentype'),\n  local('Source Sans Pro Light Italic'),\n  local('Source-Sans-Pro-300italic'),\n  url('Source-Sans-Pro-300italic/Source-Sans-Pro-300italic.woff2') format('woff2'),\n  url('Source-Sans-Pro-300italic/Source-Sans-Pro-300italic.woff') format('woff'),\n  url('Source-Sans-Pro-300italic/Source-Sans-Pro-300italic.ttf') format('truetype'),\n  url('Source-Sans-Pro-300italic/Source-Sans-Pro-300italic.svg#SourceSansPro') format('svg');\n}\n\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-weight: 400;\n  font-style: italic;\n  src: url('Source-Sans-Pro-italic/Source-Sans-Pro-italic.eot');\n  src: url('Source-Sans-Pro-italic/Source-Sans-Pro-italic.eot?#iefix') format('embedded-opentype'),\n  local('Source Sans Pro Italic'),\n  local('Source-Sans-Pro-italic'),\n  url('Source-Sans-Pro-italic/Source-Sans-Pro-italic.woff2') format('woff2'),\n  url('Source-Sans-Pro-italic/Source-Sans-Pro-italic.woff') format('woff'),\n  url('Source-Sans-Pro-italic/Source-Sans-Pro-italic.ttf') format('truetype'),\n  url('Source-Sans-Pro-italic/Source-Sans-Pro-italic.svg#SourceSansPro') format('svg');\n}\n\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-weight: 600;\n  font-style: italic;\n  src: url('Source-Sans-Pro-600italic/Source-Sans-Pro-600italic.eot');\n  src: url('Source-Sans-Pro-600italic/Source-Sans-Pro-600italic.eot?#iefix') format('embedded-opentype'),\n  local('Source Sans Pro Semibold Italic'),\n  local('Source-Sans-Pro-600italic'),\n  url('Source-Sans-Pro-600italic/Source-Sans-Pro-600italic.woff2') format('woff2'),\n  url('Source-Sans-Pro-600italic/Source-Sans-Pro-600italic.woff') format('woff'),\n  url('Source-Sans-Pro-600italic/Source-Sans-Pro-600italic.ttf') format('truetype'),\n  url('Source-Sans-Pro-600italic/Source-Sans-Pro-600italic.svg#SourceSansPro') format('svg');\n}\n\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('Glyphicons-Halflings-Regular/glyphicons-halflings-regular.eot');\n  src: url('Glyphicons-Halflings-Regular/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('Glyphicons-Halflings-Regular/glyphicons-halflings-regular.woff2') format('woff2'), url('Glyphicons-Halflings-Regular/glyphicons-halflings-regular.woff') format('woff'), url('Glyphicons-Halflings-Regular/glyphicons-halflings-regular.ttf') format('truetype'), url('Glyphicons-Halflings-Regular/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n\n\n", "/*\n * Implements a user-facing modal confirmation when link has a\n * \"data-confirm\" attribute using bootstrap's modals. MIT license.\n *\n *   - vjt@openssl.it  Tue Jul  2 18:45:15 CEST 2013\n */\n(function ($) {\n\n    /**\n     * Builds the markup for a [Bootstrap modal](http://twitter.github.io/bootstrap/javascript.html#modals)\n     * for the given `element`. Uses the following `data-` parameters to\n     * customize it:\n     *\n     *  * `data-confirm`: Contains the modal body text. HTML is allowed.\n     *                    Separate multiple paragraphs using \\n\\n.\n     *  * `data-commit`:  The 'confirm' button text. \"Confirm\" by default.\n     *  * `data-cancel`:  The 'cancel' button text. \"Cancel\" by default.\n     *  * `data-verify`:  Adds a text input in which the user has to input\n     *                    the text in this attribute value for the 'confirm'\n     *                    button to be clickable. Optional.\n     *  * `data-verify-text`:  Adds a label for the data-verify input. Optional\n     *  * `data-focus`:   Define focused input. Supported values are\n     *                    'cancel' or 'commit', 'cancel' is default for\n     *                    data-method DELETE, 'commit' for all others.\n     *\n     * You can set global setting using `dataConfirmModal.setDefaults`, for example:\n     *\n     *    dataConfirmModal.setDefaults({\n   *      title: 'Confirm your action',\n   *      commit: 'Continue',\n   *      cancel: 'Cancel',\n   *      fade:   false,\n   *      verifyClass: 'form-control',\n   *    });\n     *\n     */\n\n    var defaults = {\n        title: 'Sind Sie Sicher?',\n        commit: 'OK',\n        commitClass: 'btn btn-danger',\n        cancel: 'Abbrechen',\n        cancelClass: 'btn btn-default',\n        fade: false,\n        verifyClass: 'form-control',\n        elements: ['a[data-confirm]', 'button[data-confirm]', 'input[type=submit][data-confirm]'],\n        focus: 'commit',\n        zIndex: 1050,\n        modalClass: false,\n        show: true\n    };\n\n    var settings;\n\n    window.dataConfirmModal = {\n        setDefaults: function (newSettings) {\n            settings = $.extend(settings, newSettings);\n        },\n\n        restoreDefaults: function () {\n            settings = $.extend({}, defaults);\n        },\n\n        confirm: function (options) {\n            // Build an ephemeral modal\n            //\n            var modal = buildModal(options);\n\n            modal.spawn();\n            modal.on('hidden.bs.modal', function () {\n                modal.remove();\n            });\n\n            modal.find('.commit').on('click', function () {\n                if (options.onConfirm && options.onConfirm.call)\n                    options.onConfirm.call();\n\n                modal.modal('hide');\n            });\n\n            modal.find('.cancel').on('click', function () {\n                if (options.onCancel && options.onCancel.call)\n                    options.onCancel.call();\n\n                modal.modal('hide');\n            });\n        }\n    };\n\n    dataConfirmModal.restoreDefaults();\n\n    var buildElementModal = function (element) {\n        var options = {\n            title:        element.data('title') || element.attr('title') || element.data('original-title'),\n            text:         element.data('confirm'),\n            focus:        element.data('focus'),\n            method:       element.data('method'),\n            modalClass:   element.data('modal-class'),\n            commit:       element.data('commit'),\n            commitClass:  element.data('commit-class'),\n            cancel:       element.data('cancel'),\n            cancelClass:  element.data('cancel-class'),\n            remote:       element.data('remote'),\n            verify:       element.data('verify'),\n            verifyRegexp: element.data('verify-regexp'),\n            verifyLabel:  element.data('verify-text'),\n            verifyRegexpCaseInsensitive: element.data('verify-regexp-caseinsensitive'),\n            backdrop:     element.data('backdrop'),\n            keyboard:     element.data('keyboard'),\n            show:         element.data('show')\n        };\n\n        var modal = buildModal(options);\n\n        modal.find('.commit').on('click', function () {\n            // Call the original event handler chain\n            element.get(0).click();\n\n            modal.modal('hide');\n        });\n\n        return modal;\n    }\n\n    var buildModal = function (options) {\n        var id = 'confirm-modal-' + String(Math.random()).slice(2, -1);\n        var fade = settings.fade ? 'fade' : '';\n        var modalClass = options.modalClass ? options.modalClass : settings.modalClass;\n\n        var modal = $(\n            '<div id=\"'+id+'\" class=\"modal '+modalClass+' '+fade+'\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"'+id+'Label\" aria-hidden=\"true\">' +\n            '<div class=\"modal-dialog\">' +\n            '<div class=\"modal-content\">' +\n            '<div class=\"modal-header\">' +\n            '<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>' +\n            '<h4 id=\"'+id+'Label\" class=\"modal-title\"></h4> ' +\n            '</div>' +\n            '<div class=\"modal-body\"></div>' +\n            '<div class=\"modal-footer\">' +\n            '<button class=\"btn cancel\" data-dismiss=\"modal\" aria-hidden=\"true\"></button>' +\n            '<button class=\"btn commit\"></button>' +\n            '</div>'+\n            '</div>'+\n            '</div>'+\n            '</div>'\n        );\n\n        // Make sure it's always the top zindex\n        var highest = current = settings.zIndex;\n        $('.modal.in').not('#'+id).each(function() {\n            current = parseInt($(this).css('z-index'), 10);\n            if(current > highest) {\n                highest = current\n            }\n        });\n        modal.css('z-index', parseInt(highest) + 1);\n\n        modal.find('.modal-title').text(options.title || settings.title);\n\n        var body = modal.find('.modal-body');\n\n        $.each((options.text||'').split(/\\n{2}/), function (i, piece) {\n            body.append($('<p/>').html(piece));\n        });\n\n        var commit = modal.find('.commit');\n        commit.text(options.commit || settings.commit);\n        commit.addClass(options.commitClass || settings.commitClass);\n\n        var cancel = modal.find('.cancel');\n        cancel.text(options.cancel || settings.cancel);\n        cancel.addClass(options.cancelClass || settings.cancelClass);\n\n        if (options.remote) {\n            commit.attr('data-dismiss', 'modal');\n        }\n\n        if (options.verify || options.verifyRegexp) {\n            commit.prop('disabled', true);\n\n            var isMatch;\n            if (options.verifyRegexp) {\n                var caseInsensitive = options.verifyRegexpCaseInsensitive;\n                var regexp = options.verifyRegexp;\n                var re = new RegExp(regexp, caseInsensitive ? 'i' : '');\n\n                isMatch = function (input) { return input.match(re) };\n            } else {\n                isMatch = function (input) { return options.verify == input };\n            }\n\n            var verification = $('<input/>', {\"type\": 'text', \"class\": settings.verifyClass}).on('keyup', function () {\n                commit.prop('disabled', !isMatch($(this).val()));\n            });\n\n            modal.on('shown.bs.modal', function () {\n                verification.focus();\n            });\n\n            modal.on('hidden.bs.modal', function () {\n                verification.val('').trigger('keyup');\n            });\n\n            if (options.verifyLabel)\n                body.append($('<p>', {text: options.verifyLabel}))\n\n            body.append(verification);\n        }\n\n        var focus_element;\n        if (options.focus) {\n            focus_element = options.focus;\n        } else if (options.method == 'delete') {\n            focus_element = 'cancel'\n        } else {\n            focus_element = settings.focus;\n        }\n        focus_element = modal.find('.' + focus_element);\n\n        modal.on('shown.bs.modal', function () {\n            focus_element.focus();\n        });\n\n        $('body').append(modal);\n\n        modal.spawn = function() {\n            return modal.modal({\n                backdrop: options.backdrop,\n                keyboard: options.keyboard,\n                show:     options.show\n            });\n        };\n\n        return modal;\n    };\n\n\n    /**\n     * Returns a modal already built for the given element or builds a new one,\n     * caching it into the element's `confirm-modal` data attribute.\n     */\n    var getModal = function (element) {\n        var modal = element.data('confirm-modal');\n\n        if (!modal) {\n            modal = buildElementModal(element);\n            element.data('confirm-modal', modal);\n        }\n\n        return modal;\n    };\n\n    $.fn.confirmModal = function () {\n        var modal = getModal($(this));\n\n        modal.spawn();\n\n        return modal;\n    };\n\n    if ($.rails) {\n        /**\n         * Attaches to Rails' UJS adapter's 'confirm' event, triggered on elements\n         * having a `data-confirm` attribute set.\n         *\n         * If the modal is not visible, then it is spawned and the default Rails\n         * confirmation dialog is canceled.\n         *\n         * If the modal is visible, it means the handler is being called by the\n         * modal commit button click handler, as such the user has successfully\n         * clicked on the confirm button. In this case Rails' confirm function\n         * is briefly overriden, and afterwards reset when the modal is closed.\n         *\n         */\n        var rails_confirm = $.rails.confirm;\n\n        $(document).delegate(settings.elements.join(', '), 'confirm', function() {\n            var element = $(this), modal = getModal(element);\n\n            if (!modal.is(':visible')) {\n                modal.spawn();\n\n                // Cancel Rails' confirmation\n                return false;\n\n            } else {\n                // Modal has been confirmed. Override Rails' handler\n                $.rails.confirm = function () {\n                    return true;\n                }\n\n                modal.one('hidden.bs.modal', function() {\n                    // Reset it after modal is closed.\n                    $.rails.confirm = rails_confirm;\n                });\n\n                // Proceed with Rails' handlers\n                return true;\n            }\n        });\n    }\n\n})(jQuery);\n", "$(window).on('load',function(){\n\n    function findBootstrapEnvironment() {\n        var envs = ['xs', 'sm', 'md', 'lg'];\n\n        var $el = $('<div>');\n        $el.appendTo($('body'));\n\n        for (var i = envs.length - 1; i >= 0; i--) {\n            var env = envs[i];\n\n            $el.addClass('hidden-'+env);\n            if ($el.is(':hidden')) {\n                $el.remove();\n                return env;\n            }\n        }\n    }\n\n    var $body   = $('body'), \n        $navtop = $('.content-header-fixed'),\n        offset  = $navtop.outerHeight();\n\n    // fix body padding (in case navbar size is different than the padding)\n    $(\"section.content\").css(\"margin-top\", offset);\n\n\t//$body.css('padding-top', offset);\n    // Enable scrollSpy with correct offset based on height of navbar\n    $body.scrollspy({target: '.content-header-fixed', offset: offset + 60 });\n\n    // function to do the tweaking\n    function fixSpy() {\n        // grab a copy the scrollspy data for the element\n        var data = $body.data('bs.scrollspy');\n        // if there is data, lets fiddle with the offset value\n        if (data) {\n            // get the current height of the navbar\n            offset = $navtop.outerHeight();\n            // adjust the body's padding top to match\n            //$body.css('padding-top', offset);\n            $(\"section.content\").css(\"margin-top\", offset);\n            // change the data's offset option to match\n            data.options.offset = offset + 60;\n            // now stick it back in the element\n            $body.data('bs.scrollspy', data);\n            // and finally refresh scrollspy\n            $body.scrollspy('refresh');\n        }\n    }\n\n    // Now monitor the resize events and make the tweaks\n    var resizeTimer;\n    $(window).resize(function() {\n        if ($('input').is(':focus')) {\n            // Nothing will happen\n        } else {\n            clearTimeout(resizeTimer);\n            resizeTimer = setTimeout(fixSpy, 200);\n        }\n    });\n\n    // recalculate body top on header size change\n    var domModifiedTimeout;\n    var observer = new MutationObserver(function() {\n        clearTimeout(domModifiedTimeout);\n        domModifiedTimeout = setTimeout(function() {\n            fixSpy();\n            setTimeout(fixSpy, 300);\n        }, 1);\n    });\n    observer.observe(document.querySelector('.content-header-fixed'), {childList: true, subtree: true});\n    setTimeout(fixSpy, 1);\n\n\n    var slideUp = false;\n    var scrollingThreshold = 10;\n\n    $(window).scroll(function() {\n        if (findBootstrapEnvironment() == \"xs\") {\n            if ($(window).scrollTop() > scrollingThreshold) {\n                $('.hide-on-scroll').stop().slideUp({\n                    queue: false, complete: function () {\n                        $(this).css(\"height\", \"auto\");\n                        fixSpy();\n                    }\n                });\n                slideUp = true;\n            }\n        }\n    });\n\n    $navtop.mouseenter(function() {\n            if (slideUp) {\n                $('.hide-on-scroll').stop().slideDown({\n                    queue: false, complete: function () {\n                        $(this).css(\"height\", \"auto\");\n                        fixSpy();\n                    }\n                });\n                slideUp = false;\n            }\n    });\n\n    $navtop.click(function() {\n            if (slideUp) {\n                $('.hide-on-scroll').stop().slideDown({\n                    queue: false, complete: function () {\n                        $(this).css(\"height\", \"auto\");\n                        fixSpy();\n                    }\n                });\n                slideUp = false;\n            }\n    });\n\n    $navtop.mouseleave(function(event) {\n        if (findBootstrapEnvironment() == \"xs\") {\n\n            if (!slideUp && $(window).scrollTop() > scrollingThreshold) {\n                $('.hide-on-scroll').stop().slideUp({\n                    queue: false, complete: function () {\n                        $(this).css(\"height\", \"auto\");\n                        fixSpy();\n                    }\n                });\n                slideUp = true;\n            }\n        }\n    })\n\n});\n\n\n// Add smooth scrolling on all links inside the navbar\ninitSmoothScrolling = function(div) {\n\t$(div).find(\".nav-tabs a[href*=\\'#\\']\").on('click', function(event) {\n\t\n\t  var tab = $(this);\n\t  var pane = $(tab.attr('href')).next();\n\t  // Make sure this.hash has a value before overriding default behavior\n\t  if (this.hash !== \"\") {\n\t  \t\n\t    // Prevent default anchor click behavior\n\t    event.preventDefault();\n\t\n\t    // Store hash\n\t    var hash = this.hash;\n\t\n\t    // Using jQuery's animate() method to add smooth page scroll\n\t    // The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area\n\t    $('html, body').animate({\n\t      scrollTop: $(hash).offset().top - ($(\".content-header-fixed\").height() + 40)\n\t    }, 300, function(){\n\t\n\t\t    // Add hash (#) to URL when done scrolling (default click behavior)\n\t\t    window.location.hash = hash;\n\t\t    \n\t\t\tif (pane.data('source-type') == 'lazy') {\n\t\t\t\tvar url = pane.data('source');\n\t\t\t\t$(pane).load(url, function(data, status, xhr) {\n\t\t\t\t\tif (status != 'error') {\n\t\t\t\t    \tpane.data('loaded', 1);\n\t\t\t\t    \treattachJSAfterAjax(pane);\n\t\t\t\t    \tpane.data('source-type', null);\n\t\t\t\t    \t$('html, body').animate({\n\t\t\t\t\t      scrollTop: $(hash).offset().top - ($(\".content-header-fixed\").height() + 40)\n\t\t\t\t\t    }, 300);\n\t\t\t\t  \t}\n\t\t\t\t});\n\t\t\t}\n\t\t    \n\t\t    window.scrollTo(0, $(hash).offset().top - ($(\".content-header-fixed\").height() + 40));\n\t\t    \n\t    });\n\t\n\t  } // End if\n\t\n\t});\n};\n", "const body = $('body')\n$(document)\n\t.ajaxStart((e) => {\n\t\t$('body').addClass('loading')\n\t})\n\t.ajaxStop((e) => {\n\t\t$('body').removeClass('loading')\n\t})\n\t.on('ajax:beforeSend', (e) => {\n\t\t$('body').addClass('loading')\n\t})\n\t.on('ajax:stopped', (e) => {\n\t\t$('body').removeClass('loading')\n\t})\n\t.on('ajax:success', (e) => {\n\t\t$('body').removeClass('loading')\n\t})\n\t.on('ajax:error', (e) => {\n\t\t$('body').removeClass('loading')\n\t})\n\n// TODO: beforeunload fires on download links.\n// $(window).on('beforeunload', () => {\n// \t$('body').addClass('loading');\n// });\n\n\n", "document.addEventListener('wheel', (event) => {\n  const el = document.activeElement;\n  if (el instanceof HTMLInputElement &&\n      el.type === 'number' &&\n      el === event.target) {\n    el.blur();\n  }\n}, { passive: true });\n", ".datepicker {\n  width: -moz-min-content;\n  width: min-content;\n}\n\n.datepicker:not(.active) {\n  display: none;\n}\n\n.datepicker-dropdown {\n  position: absolute;\n  z-index: 1000;\n  padding-top: 4px;\n}\n\n.datepicker-dropdown.datepicker-orient-top {\n  padding-top: 0;\n  padding-bottom: 4px;\n}\n\n.datepicker-picker {\n  display: flex;\n  flex-direction: column;\n  border-radius: 0.25rem;\n  background-color: #fff;\n}\n\n.datepicker-dropdown .datepicker-picker {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.175);\n}\n\n.datepicker-main {\n  flex: auto;\n  padding: 2px;\n}\n\n.datepicker-footer {\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);\n  background-color: #f8f9fa;\n}\n\n.datepicker-title {\n  box-shadow: inset 0 -1px 1px rgba(0, 0, 0, 0.1);\n  background-color: #f8f9fa;\n  padding: 0.375rem 0.75rem;\n  text-align: center;\n  font-weight: 700;\n}\n\n.datepicker-controls {\n  display: flex;\n}\n\n.datepicker-header .datepicker-controls {\n  padding: 2px 2px 0;\n}\n\n.datepicker-controls .btn {\n  border-color: #f8f9fa;\n  background-color: #fff;\n}\n\n.datepicker-controls .btn:hover {\n  border-color: #dbe0e5;\n  background-color: #e2e6ea;\n  color: #212529;\n}\n\n.datepicker-controls .btn:focus {\n  border-color: #dbe0e5;\n  box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n  background-color: #e2e6ea;\n  color: #212529;\n}\n\n.datepicker-controls .btn:disabled {\n  border-color: #f8f9fa;\n  background-color: #f8f9fa;\n  color: #212529;\n}\n\n.datepicker-controls .btn:not(:disabled):active {\n  border-color: #d4dae0;\n  background-color: #dbe0e5;\n  color: #212529;\n}\n\n.datepicker-controls .btn:not(:disabled):active:focus {\n  box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.datepicker-header .datepicker-controls .btn {\n  border-color: transparent;\n  font-weight: bold;\n}\n\n.datepicker-footer .datepicker-controls .btn {\n  flex: auto;\n  margin: calc(0.375rem - 1px) 0.375rem;\n  border-radius: 0.2rem;\n  font-size: 0.875rem;\n}\n\n.datepicker-controls .view-switch {\n  flex: auto;\n}\n\n.datepicker-controls .prev-button,\n.datepicker-controls .next-button {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n  flex: 0 0 14.2857142857%;\n}\n\n.datepicker-controls .prev-button.disabled,\n.datepicker-controls .next-button.disabled {\n  visibility: hidden;\n}\n\n.datepicker-view,\n.datepicker-grid {\n  display: flex;\n}\n\n.datepicker-view {\n  align-items: stretch;\n  width: 15.75rem;\n}\n\n.datepicker-grid {\n  flex-wrap: wrap;\n  flex: auto;\n}\n\n.datepicker .days {\n  display: flex;\n  flex-direction: column;\n  flex: auto;\n}\n\n.datepicker .days-of-week {\n  display: flex;\n}\n\n.datepicker .week-numbers {\n  display: flex;\n  flex-direction: column;\n  flex: 0 0 9.6774193548%;\n}\n\n.datepicker .weeks {\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n  flex: auto;\n}\n\n.datepicker span {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 0.25rem;\n  cursor: default;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.datepicker .dow {\n  height: 1.5rem;\n  font-size: 0.9375rem;\n  font-weight: 700;\n}\n\n.datepicker .week {\n  flex: auto;\n  color: #dee2e6;\n  font-size: 0.875rem;\n}\n\n.datepicker-cell,\n.datepicker .days .dow {\n  flex-basis: 14.2857142857%;\n}\n\n.datepicker-cell {\n  height: 2.25rem;\n}\n\n.datepicker-cell:not(.day) {\n  flex-basis: 25%;\n  height: 4.5rem;\n}\n\n.datepicker-cell:not(.disabled):hover {\n  background-color: #f9f9f9;\n  cursor: pointer;\n}\n\n.datepicker-cell.focused:not(.selected) {\n  background-color: #e2e6ea;\n}\n\n.datepicker-cell.selected,\n.datepicker-cell.selected:hover {\n  background-color: #007bff;\n  color: #fff;\n  font-weight: 600;\n}\n\n.datepicker-cell.disabled {\n  color: #adb5bd;\n}\n\n.datepicker-cell.prev:not(.disabled),\n.datepicker-cell.next:not(.disabled) {\n  color: #6c757d;\n}\n\n.datepicker-cell.prev.selected,\n.datepicker-cell.next.selected {\n  color: #e6e6e6;\n}\n\n.datepicker-cell.highlighted:not(.selected):not(.range):not(.today) {\n  border-radius: 0;\n  background-color: #f8f9fa;\n}\n\n.datepicker-cell.highlighted:not(.selected):not(.range):not(.today):not(.disabled):hover {\n  background-color: #f1f3f5;\n}\n\n.datepicker-cell.highlighted:not(.selected):not(.range):not(.today).focused {\n  background-color: #e2e6ea;\n}\n\n.datepicker-cell.today:not(.selected) {\n  background-color: #20c997;\n}\n\n.datepicker-cell.today:not(.selected):not(.disabled) {\n  color: #fff;\n}\n\n.datepicker-cell.today.focused:not(.selected) {\n  background-color: #1fc493;\n}\n\n.datepicker-cell.range-end:not(.selected),\n.datepicker-cell.range-start:not(.selected) {\n  background-color: #6c757d;\n  color: #fff;\n}\n\n.datepicker-cell.range-end.focused:not(.selected),\n.datepicker-cell.range-start.focused:not(.selected) {\n  background-color: #69727a;\n}\n\n.datepicker-cell.range-start:not(.range-end) {\n  border-radius: 0.25rem 0 0 0.25rem;\n}\n\n.datepicker-cell.range-end:not(.range-start) {\n  border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.datepicker-cell.range {\n  border-radius: 0;\n  background-color: #e9ecef;\n}\n\n.datepicker-cell.range:not(.disabled):not(.focused):not(.today):hover {\n  background-color: #e2e6ea;\n}\n\n.datepicker-cell.range.disabled {\n  color: #ced4db;\n}\n\n.datepicker-cell.range.focused {\n  background-color: #dbe0e5;\n}\n\n.datepicker-input.in-edit {\n  border-color: #6cb3ff;\n}\n\n.datepicker-input.in-edit:focus,\n.datepicker-input.in-edit:active {\n  box-shadow: 0 0 0.25em 0.25em rgba(108, 179, 255, 0.2);\n}\n\n.datepicker-grid, .datepicker-view {\n  width: 30rem;\n}\n\n.datepicker-dropdown {\n  z-index: 9999 !important;\n}\n\n.datepicker-footer .datepicker-controls .btn {\n  font-size: inherit;\n}\n\n.datepicker-view .dow {\n  font-size: inherit;\n  height: 2.3rem;\n}\n\n.datepicker-view .week, .datepicker-cell {\n  height: 3.5rem;\n  line-height: 3.5rem;\n}\n\n.datepicker-cell.today.focused:not(.selected), .datepicker-cell.today:not(.selected) {\n  background-color: #ffffcc;\n}\n\n.datepicker-cell.today:not(.selected):not(.disabled) {\n  color: #000000;\n}\n\n.datepicker-cell.selected, .datepicker-cell.selected:hover {\n  background-color: #008199;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUva3Vyc28vYXBwcy9rdXJzby9yZWxlYXNlcy8yMDI2MDkzMDEyNDk1My9hcHAvamF2YXNjcmlwdC9jb21wb25lbnRzL2RhdGVwaWNrZXIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92YW5pbGxhanMtZGF0ZXBpY2tlci9kaXN0L2Nzcy9kYXRlcGlja2VyLWJzNC5jc3MiLCJjdXN0b20tYnMzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7QUFBQTtFQUVFO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtBQUFBO0VBRUU7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDRztFQUNLOzs7QUFHVjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0FBQUE7RUFFRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0FBQUE7RUFFRTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7OztBQUdGO0FBQUE7RUFFRTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUNsU0Y7RUFDSTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7OztBQUdKO0VBQ0k7OztBQUdKO0VBQ0k7OztBQUdKO0VBQ0kiLCJzb3VyY2VzQ29udGVudCI6WyIuZGF0ZXBpY2tlciB7XG4gIHdpZHRoOiAtbW96LW1pbi1jb250ZW50O1xuICB3aWR0aDogbWluLWNvbnRlbnQ7XG59XG5cbi5kYXRlcGlja2VyOm5vdCguYWN0aXZlKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5kYXRlcGlja2VyLWRyb3Bkb3duIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxMDAwO1xuICBwYWRkaW5nLXRvcDogNHB4O1xufVxuXG4uZGF0ZXBpY2tlci1kcm9wZG93bi5kYXRlcGlja2VyLW9yaWVudC10b3Age1xuICBwYWRkaW5nLXRvcDogMDtcbiAgcGFkZGluZy1ib3R0b206IDRweDtcbn1cblxuLmRhdGVwaWNrZXItcGlja2VyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuLmRhdGVwaWNrZXItZHJvcGRvd24gLmRhdGVwaWNrZXItcGlja2VyIHtcbiAgYm94LXNoYWRvdzogMCAwLjVyZW0gMXJlbSByZ2JhKDAsIDAsIDAsIDAuMTc1KTtcbn1cblxuLmRhdGVwaWNrZXItbWFpbiB7XG4gIGZsZXg6IGF1dG87XG4gIHBhZGRpbmc6IDJweDtcbn1cblxuLmRhdGVwaWNrZXItZm9vdGVyIHtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbn1cblxuLmRhdGVwaWNrZXItdGl0bGUge1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgcGFkZGluZzogMC4zNzVyZW0gMC43NXJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuXG4uZGF0ZXBpY2tlci1jb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5kYXRlcGlja2VyLWhlYWRlciAuZGF0ZXBpY2tlci1jb250cm9scyB7XG4gIHBhZGRpbmc6IDJweCAycHggMDtcbn1cblxuLmRhdGVwaWNrZXItY29udHJvbHMgLmJ0biB7XG4gIGJvcmRlci1jb2xvcjogI2Y4ZjlmYTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuLmRhdGVwaWNrZXItY29udHJvbHMgLmJ0bjpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogI2RiZTBlNTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTZlYTtcbiAgY29sb3I6ICMyMTI1Mjk7XG59XG5cbi5kYXRlcGlja2VyLWNvbnRyb2xzIC5idG46Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICNkYmUwZTU7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIxNiwgMjE3LCAyMTksIDAuNSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMmU2ZWE7XG4gIGNvbG9yOiAjMjEyNTI5O1xufVxuXG4uZGF0ZXBpY2tlci1jb250cm9scyAuYnRuOmRpc2FibGVkIHtcbiAgYm9yZGVyLWNvbG9yOiAjZjhmOWZhO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xuICBjb2xvcjogIzIxMjUyOTtcbn1cblxuLmRhdGVwaWNrZXItY29udHJvbHMgLmJ0bjpub3QoOmRpc2FibGVkKTphY3RpdmUge1xuICBib3JkZXItY29sb3I6ICNkNGRhZTA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkYmUwZTU7XG4gIGNvbG9yOiAjMjEyNTI5O1xufVxuXG4uZGF0ZXBpY2tlci1jb250cm9scyAuYnRuOm5vdCg6ZGlzYWJsZWQpOmFjdGl2ZTpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDIxNiwgMjE3LCAyMTksIDAuNSk7XG59XG5cbi5kYXRlcGlja2VyLWhlYWRlciAuZGF0ZXBpY2tlci1jb250cm9scyAuYnRuIHtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5kYXRlcGlja2VyLWZvb3RlciAuZGF0ZXBpY2tlci1jb250cm9scyAuYnRuIHtcbiAgZmxleDogYXV0bztcbiAgbWFyZ2luOiBjYWxjKDAuMzc1cmVtIC0gMXB4KSAwLjM3NXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC4ycmVtO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xufVxuXG4uZGF0ZXBpY2tlci1jb250cm9scyAudmlldy1zd2l0Y2gge1xuICBmbGV4OiBhdXRvO1xufVxuXG4uZGF0ZXBpY2tlci1jb250cm9scyAucHJldi1idXR0b24sXG4uZGF0ZXBpY2tlci1jb250cm9scyAubmV4dC1idXR0b24ge1xuICBwYWRkaW5nLXJpZ2h0OiAwLjM3NXJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjM3NXJlbTtcbiAgZmxleDogMCAwIDE0LjI4NTcxNDI4NTclO1xufVxuXG4uZGF0ZXBpY2tlci1jb250cm9scyAucHJldi1idXR0b24uZGlzYWJsZWQsXG4uZGF0ZXBpY2tlci1jb250cm9scyAubmV4dC1idXR0b24uZGlzYWJsZWQge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG5cbi5kYXRlcGlja2VyLXZpZXcsXG4uZGF0ZXBpY2tlci1ncmlkIHtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuLmRhdGVwaWNrZXItdmlldyB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICB3aWR0aDogMTUuNzVyZW07XG59XG5cbi5kYXRlcGlja2VyLWdyaWQge1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGZsZXg6IGF1dG87XG59XG5cbi5kYXRlcGlja2VyIC5kYXlzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleDogYXV0bztcbn1cblxuLmRhdGVwaWNrZXIgLmRheXMtb2Ytd2VlayB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5kYXRlcGlja2VyIC53ZWVrLW51bWJlcnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAwIDAgOS42Nzc0MTkzNTQ4JTtcbn1cblxuLmRhdGVwaWNrZXIgLndlZWtzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIGZsZXg6IGF1dG87XG59XG5cbi5kYXRlcGlja2VyIHNwYW4ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5kYXRlcGlja2VyIC5kb3cge1xuICBoZWlnaHQ6IDEuNXJlbTtcbiAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbi5kYXRlcGlja2VyIC53ZWVrIHtcbiAgZmxleDogYXV0bztcbiAgY29sb3I6ICNkZWUyZTY7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG59XG5cbi5kYXRlcGlja2VyLWNlbGwsXG4uZGF0ZXBpY2tlciAuZGF5cyAuZG93IHtcbiAgZmxleC1iYXNpczogMTQuMjg1NzE0Mjg1NyU7XG59XG5cbi5kYXRlcGlja2VyLWNlbGwge1xuICBoZWlnaHQ6IDIuMjVyZW07XG59XG5cbi5kYXRlcGlja2VyLWNlbGw6bm90KC5kYXkpIHtcbiAgZmxleC1iYXNpczogMjUlO1xuICBoZWlnaHQ6IDQuNXJlbTtcbn1cblxuLmRhdGVwaWNrZXItY2VsbDpub3QoLmRpc2FibGVkKTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC5mb2N1c2VkOm5vdCguc2VsZWN0ZWQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTZlYTtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC5zZWxlY3RlZCxcbi5kYXRlcGlja2VyLWNlbGwuc2VsZWN0ZWQ6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC5kaXNhYmxlZCB7XG4gIGNvbG9yOiAjYWRiNWJkO1xufVxuXG4uZGF0ZXBpY2tlci1jZWxsLnByZXY6bm90KC5kaXNhYmxlZCksXG4uZGF0ZXBpY2tlci1jZWxsLm5leHQ6bm90KC5kaXNhYmxlZCkge1xuICBjb2xvcjogIzZjNzU3ZDtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC5wcmV2LnNlbGVjdGVkLFxuLmRhdGVwaWNrZXItY2VsbC5uZXh0LnNlbGVjdGVkIHtcbiAgY29sb3I6ICNlNmU2ZTY7XG59XG5cbi5kYXRlcGlja2VyLWNlbGwuaGlnaGxpZ2h0ZWQ6bm90KC5zZWxlY3RlZCk6bm90KC5yYW5nZSk6bm90KC50b2RheSkge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xufVxuXG4uZGF0ZXBpY2tlci1jZWxsLmhpZ2hsaWdodGVkOm5vdCguc2VsZWN0ZWQpOm5vdCgucmFuZ2UpOm5vdCgudG9kYXkpOm5vdCguZGlzYWJsZWQpOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjNmNTtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC5oaWdobGlnaHRlZDpub3QoLnNlbGVjdGVkKTpub3QoLnJhbmdlKTpub3QoLnRvZGF5KS5mb2N1c2VkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTZlYTtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC50b2RheTpub3QoLnNlbGVjdGVkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMGM5OTc7XG59XG5cbi5kYXRlcGlja2VyLWNlbGwudG9kYXk6bm90KC5zZWxlY3RlZCk6bm90KC5kaXNhYmxlZCkge1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC50b2RheS5mb2N1c2VkOm5vdCguc2VsZWN0ZWQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFmYzQ5Mztcbn1cblxuLmRhdGVwaWNrZXItY2VsbC5yYW5nZS1lbmQ6bm90KC5zZWxlY3RlZCksXG4uZGF0ZXBpY2tlci1jZWxsLnJhbmdlLXN0YXJ0Om5vdCguc2VsZWN0ZWQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZjNzU3ZDtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5kYXRlcGlja2VyLWNlbGwucmFuZ2UtZW5kLmZvY3VzZWQ6bm90KC5zZWxlY3RlZCksXG4uZGF0ZXBpY2tlci1jZWxsLnJhbmdlLXN0YXJ0LmZvY3VzZWQ6bm90KC5zZWxlY3RlZCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjk3MjdhO1xufVxuXG4uZGF0ZXBpY2tlci1jZWxsLnJhbmdlLXN0YXJ0Om5vdCgucmFuZ2UtZW5kKSB7XG4gIGJvcmRlci1yYWRpdXM6IDAuMjVyZW0gMCAwIDAuMjVyZW07XG59XG5cbi5kYXRlcGlja2VyLWNlbGwucmFuZ2UtZW5kOm5vdCgucmFuZ2Utc3RhcnQpIHtcbiAgYm9yZGVyLXJhZGl1czogMCAwLjI1cmVtIDAuMjVyZW0gMDtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC5yYW5nZSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XG59XG5cbi5kYXRlcGlja2VyLWNlbGwucmFuZ2U6bm90KC5kaXNhYmxlZCk6bm90KC5mb2N1c2VkKTpub3QoLnRvZGF5KTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMmU2ZWE7XG59XG5cbi5kYXRlcGlja2VyLWNlbGwucmFuZ2UuZGlzYWJsZWQge1xuICBjb2xvcjogI2NlZDRkYjtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC5yYW5nZS5mb2N1c2VkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RiZTBlNTtcbn1cblxuLmRhdGVwaWNrZXItaW5wdXQuaW4tZWRpdCB7XG4gIGJvcmRlci1jb2xvcjogIzZjYjNmZjtcbn1cblxuLmRhdGVwaWNrZXItaW5wdXQuaW4tZWRpdDpmb2N1cyxcbi5kYXRlcGlja2VyLWlucHV0LmluLWVkaXQ6YWN0aXZlIHtcbiAgYm94LXNoYWRvdzogMCAwIDAuMjVlbSAwLjI1ZW0gcmdiYSgxMDgsIDE3OSwgMjU1LCAwLjIpO1xufSIsIkBpbXBvcnQgJ3ZhbmlsbGFqcy1kYXRlcGlja2VyL2Rpc3QvY3NzL2RhdGVwaWNrZXItYnM0JztcblxuLmRhdGVwaWNrZXItZ3JpZCwgLmRhdGVwaWNrZXItdmlldyB7XG4gICAgd2lkdGg6IDMwcmVtO1xufVxuXG4uZGF0ZXBpY2tlci1kcm9wZG93biB7XG4gICAgei1pbmRleDogOTk5OSAhaW1wb3J0YW50O1xufVxuXG4uZGF0ZXBpY2tlci1mb290ZXIgLmRhdGVwaWNrZXItY29udHJvbHMgLmJ0biB7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xufVxuXG4uZGF0ZXBpY2tlci12aWV3IC5kb3cge1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBoZWlnaHQ6IDIuM3JlbTtcbn1cblxuLmRhdGVwaWNrZXItdmlldyAud2VlaywgLmRhdGVwaWNrZXItY2VsbCB7XG4gICAgaGVpZ2h0OiAzLjVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDMuNXJlbTtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC50b2RheS5mb2N1c2VkOm5vdCguc2VsZWN0ZWQpLCAuZGF0ZXBpY2tlci1jZWxsLnRvZGF5Om5vdCguc2VsZWN0ZWQpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmNjO1xufVxuXG4uZGF0ZXBpY2tlci1jZWxsLnRvZGF5Om5vdCguc2VsZWN0ZWQpOm5vdCguZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogIzAwMDAwMDtcbn1cblxuLmRhdGVwaWNrZXItY2VsbC5zZWxlY3RlZCwgLmRhdGVwaWNrZXItY2VsbC5zZWxlY3RlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwODE5OTtcbn1cbiJdfQ== */", "/*\nCopyright 2012 Igor Vaynberg\n\nVersion: @@ver@@ Timestamp: @@timestamp@@\n\nThis software is licensed under the Apache License, Version 2.0 (the \"Apache License\") or the GNU\nGeneral Public License version 2 (the \"GPL License\"). You may choose either license to govern your\nuse of this software only upon the condition that you accept all of the terms of either the Apache\nLicense or the GPL License.\n\nYou may obtain a copy of the Apache License and the GPL License at:\n\n    http://www.apache.org/licenses/LICENSE-2.0\n    http://www.gnu.org/licenses/gpl-2.0.html\n\nUnless required by applicable law or agreed to in writing, software distributed under the\nApache License or the GPL License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for\nthe specific language governing permissions and limitations under the Apache License and the GPL License.\n*/\n(function ($) {\n    if(typeof $.fn.each2 == \"undefined\") {\n        $.extend($.fn, {\n            /*\n            * 4-10 times faster .each replacement\n            * use it carefully, as it overrides jQuery context of element on each iteration\n            */\n            each2 : function (c) {\n                var j = $([0]), i = -1, l = this.length;\n                while (\n                    ++i < l\n                    && (j.context = j[0] = this[i])\n                    && c.call(j[0], i, j) !== false //\"this\"=DOM, i=index, j=jQuery object\n                );\n                return this;\n            }\n        });\n    }\n})(jQuery);\n\n(function ($, undefined) {\n    \"use strict\";\n    /*global document, window, jQuery, console */\n\n    if (window.Select2 !== undefined) {\n        return;\n    }\n\n    var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer,\n        lastMousePosition={x:0,y:0}, $document, scrollBarDimensions,\n\n    KEY = {\n        TAB: 9,\n        ENTER: 13,\n        ESC: 27,\n        SPACE: 32,\n        LEFT: 37,\n        UP: 38,\n        RIGHT: 39,\n        DOWN: 40,\n        SHIFT: 16,\n        CTRL: 17,\n        ALT: 18,\n        PAGE_UP: 33,\n        PAGE_DOWN: 34,\n        HOME: 36,\n        END: 35,\n        BACKSPACE: 8,\n        DELETE: 46,\n        isArrow: function (k) {\n            k = k.which ? k.which : k;\n            switch (k) {\n            case KEY.LEFT:\n            case KEY.RIGHT:\n            case KEY.UP:\n            case KEY.DOWN:\n                return true;\n            }\n            return false;\n        },\n        isControl: function (e) {\n            var k = e.which;\n            switch (k) {\n            case KEY.SHIFT:\n            case KEY.CTRL:\n            case KEY.ALT:\n                return true;\n            }\n\n            if (e.metaKey) return true;\n\n            return false;\n        },\n        isFunctionKey: function (k) {\n            k = k.which ? k.which : k;\n            return k >= 112 && k <= 123;\n        }\n    },\n    MEASURE_SCROLLBAR_TEMPLATE = \"<div class='select2-measure-scrollbar'></div>\",\n\n    DIACRITICS = {\"\\u24B6\":\"A\",\"\\uFF21\":\"A\",\"\\u00C0\":\"A\",\"\\u00C1\":\"A\",\"\\u00C2\":\"A\",\"\\u1EA6\":\"A\",\"\\u1EA4\":\"A\",\"\\u1EAA\":\"A\",\"\\u1EA8\":\"A\",\"\\u00C3\":\"A\",\"\\u0100\":\"A\",\"\\u0102\":\"A\",\"\\u1EB0\":\"A\",\"\\u1EAE\":\"A\",\"\\u1EB4\":\"A\",\"\\u1EB2\":\"A\",\"\\u0226\":\"A\",\"\\u01E0\":\"A\",\"\\u00C4\":\"A\",\"\\u01DE\":\"A\",\"\\u1EA2\":\"A\",\"\\u00C5\":\"A\",\"\\u01FA\":\"A\",\"\\u01CD\":\"A\",\"\\u0200\":\"A\",\"\\u0202\":\"A\",\"\\u1EA0\":\"A\",\"\\u1EAC\":\"A\",\"\\u1EB6\":\"A\",\"\\u1E00\":\"A\",\"\\u0104\":\"A\",\"\\u023A\":\"A\",\"\\u2C6F\":\"A\",\"\\uA732\":\"AA\",\"\\u00C6\":\"AE\",\"\\u01FC\":\"AE\",\"\\u01E2\":\"AE\",\"\\uA734\":\"AO\",\"\\uA736\":\"AU\",\"\\uA738\":\"AV\",\"\\uA73A\":\"AV\",\"\\uA73C\":\"AY\",\"\\u24B7\":\"B\",\"\\uFF22\":\"B\",\"\\u1E02\":\"B\",\"\\u1E04\":\"B\",\"\\u1E06\":\"B\",\"\\u0243\":\"B\",\"\\u0182\":\"B\",\"\\u0181\":\"B\",\"\\u24B8\":\"C\",\"\\uFF23\":\"C\",\"\\u0106\":\"C\",\"\\u0108\":\"C\",\"\\u010A\":\"C\",\"\\u010C\":\"C\",\"\\u00C7\":\"C\",\"\\u1E08\":\"C\",\"\\u0187\":\"C\",\"\\u023B\":\"C\",\"\\uA73E\":\"C\",\"\\u24B9\":\"D\",\"\\uFF24\":\"D\",\"\\u1E0A\":\"D\",\"\\u010E\":\"D\",\"\\u1E0C\":\"D\",\"\\u1E10\":\"D\",\"\\u1E12\":\"D\",\"\\u1E0E\":\"D\",\"\\u0110\":\"D\",\"\\u018B\":\"D\",\"\\u018A\":\"D\",\"\\u0189\":\"D\",\"\\uA779\":\"D\",\"\\u01F1\":\"DZ\",\"\\u01C4\":\"DZ\",\"\\u01F2\":\"Dz\",\"\\u01C5\":\"Dz\",\"\\u24BA\":\"E\",\"\\uFF25\":\"E\",\"\\u00C8\":\"E\",\"\\u00C9\":\"E\",\"\\u00CA\":\"E\",\"\\u1EC0\":\"E\",\"\\u1EBE\":\"E\",\"\\u1EC4\":\"E\",\"\\u1EC2\":\"E\",\"\\u1EBC\":\"E\",\"\\u0112\":\"E\",\"\\u1E14\":\"E\",\"\\u1E16\":\"E\",\"\\u0114\":\"E\",\"\\u0116\":\"E\",\"\\u00CB\":\"E\",\"\\u1EBA\":\"E\",\"\\u011A\":\"E\",\"\\u0204\":\"E\",\"\\u0206\":\"E\",\"\\u1EB8\":\"E\",\"\\u1EC6\":\"E\",\"\\u0228\":\"E\",\"\\u1E1C\":\"E\",\"\\u0118\":\"E\",\"\\u1E18\":\"E\",\"\\u1E1A\":\"E\",\"\\u0190\":\"E\",\"\\u018E\":\"E\",\"\\u24BB\":\"F\",\"\\uFF26\":\"F\",\"\\u1E1E\":\"F\",\"\\u0191\":\"F\",\"\\uA77B\":\"F\",\"\\u24BC\":\"G\",\"\\uFF27\":\"G\",\"\\u01F4\":\"G\",\"\\u011C\":\"G\",\"\\u1E20\":\"G\",\"\\u011E\":\"G\",\"\\u0120\":\"G\",\"\\u01E6\":\"G\",\"\\u0122\":\"G\",\"\\u01E4\":\"G\",\"\\u0193\":\"G\",\"\\uA7A0\":\"G\",\"\\uA77D\":\"G\",\"\\uA77E\":\"G\",\"\\u24BD\":\"H\",\"\\uFF28\":\"H\",\"\\u0124\":\"H\",\"\\u1E22\":\"H\",\"\\u1E26\":\"H\",\"\\u021E\":\"H\",\"\\u1E24\":\"H\",\"\\u1E28\":\"H\",\"\\u1E2A\":\"H\",\"\\u0126\":\"H\",\"\\u2C67\":\"H\",\"\\u2C75\":\"H\",\"\\uA78D\":\"H\",\"\\u24BE\":\"I\",\"\\uFF29\":\"I\",\"\\u00CC\":\"I\",\"\\u00CD\":\"I\",\"\\u00CE\":\"I\",\"\\u0128\":\"I\",\"\\u012A\":\"I\",\"\\u012C\":\"I\",\"\\u0130\":\"I\",\"\\u00CF\":\"I\",\"\\u1E2E\":\"I\",\"\\u1EC8\":\"I\",\"\\u01CF\":\"I\",\"\\u0208\":\"I\",\"\\u020A\":\"I\",\"\\u1ECA\":\"I\",\"\\u012E\":\"I\",\"\\u1E2C\":\"I\",\"\\u0197\":\"I\",\"\\u24BF\":\"J\",\"\\uFF2A\":\"J\",\"\\u0134\":\"J\",\"\\u0248\":\"J\",\"\\u24C0\":\"K\",\"\\uFF2B\":\"K\",\"\\u1E30\":\"K\",\"\\u01E8\":\"K\",\"\\u1E32\":\"K\",\"\\u0136\":\"K\",\"\\u1E34\":\"K\",\"\\u0198\":\"K\",\"\\u2C69\":\"K\",\"\\uA740\":\"K\",\"\\uA742\":\"K\",\"\\uA744\":\"K\",\"\\uA7A2\":\"K\",\"\\u24C1\":\"L\",\"\\uFF2C\":\"L\",\"\\u013F\":\"L\",\"\\u0139\":\"L\",\"\\u013D\":\"L\",\"\\u1E36\":\"L\",\"\\u1E38\":\"L\",\"\\u013B\":\"L\",\"\\u1E3C\":\"L\",\"\\u1E3A\":\"L\",\"\\u0141\":\"L\",\"\\u023D\":\"L\",\"\\u2C62\":\"L\",\"\\u2C60\":\"L\",\"\\uA748\":\"L\",\"\\uA746\":\"L\",\"\\uA780\":\"L\",\"\\u01C7\":\"LJ\",\"\\u01C8\":\"Lj\",\"\\u24C2\":\"M\",\"\\uFF2D\":\"M\",\"\\u1E3E\":\"M\",\"\\u1E40\":\"M\",\"\\u1E42\":\"M\",\"\\u2C6E\":\"M\",\"\\u019C\":\"M\",\"\\u24C3\":\"N\",\"\\uFF2E\":\"N\",\"\\u01F8\":\"N\",\"\\u0143\":\"N\",\"\\u00D1\":\"N\",\"\\u1E44\":\"N\",\"\\u0147\":\"N\",\"\\u1E46\":\"N\",\"\\u0145\":\"N\",\"\\u1E4A\":\"N\",\"\\u1E48\":\"N\",\"\\u0220\":\"N\",\"\\u019D\":\"N\",\"\\uA790\":\"N\",\"\\uA7A4\":\"N\",\"\\u01CA\":\"NJ\",\"\\u01CB\":\"Nj\",\"\\u24C4\":\"O\",\"\\uFF2F\":\"O\",\"\\u00D2\":\"O\",\"\\u00D3\":\"O\",\"\\u00D4\":\"O\",\"\\u1ED2\":\"O\",\"\\u1ED0\":\"O\",\"\\u1ED6\":\"O\",\"\\u1ED4\":\"O\",\"\\u00D5\":\"O\",\"\\u1E4C\":\"O\",\"\\u022C\":\"O\",\"\\u1E4E\":\"O\",\"\\u014C\":\"O\",\"\\u1E50\":\"O\",\"\\u1E52\":\"O\",\"\\u014E\":\"O\",\"\\u022E\":\"O\",\"\\u0230\":\"O\",\"\\u00D6\":\"O\",\"\\u022A\":\"O\",\"\\u1ECE\":\"O\",\"\\u0150\":\"O\",\"\\u01D1\":\"O\",\"\\u020C\":\"O\",\"\\u020E\":\"O\",\"\\u01A0\":\"O\",\"\\u1EDC\":\"O\",\"\\u1EDA\":\"O\",\"\\u1EE0\":\"O\",\"\\u1EDE\":\"O\",\"\\u1EE2\":\"O\",\"\\u1ECC\":\"O\",\"\\u1ED8\":\"O\",\"\\u01EA\":\"O\",\"\\u01EC\":\"O\",\"\\u00D8\":\"O\",\"\\u01FE\":\"O\",\"\\u0186\":\"O\",\"\\u019F\":\"O\",\"\\uA74A\":\"O\",\"\\uA74C\":\"O\",\"\\u01A2\":\"OI\",\"\\uA74E\":\"OO\",\"\\u0222\":\"OU\",\"\\u24C5\":\"P\",\"\\uFF30\":\"P\",\"\\u1E54\":\"P\",\"\\u1E56\":\"P\",\"\\u01A4\":\"P\",\"\\u2C63\":\"P\",\"\\uA750\":\"P\",\"\\uA752\":\"P\",\"\\uA754\":\"P\",\"\\u24C6\":\"Q\",\"\\uFF31\":\"Q\",\"\\uA756\":\"Q\",\"\\uA758\":\"Q\",\"\\u024A\":\"Q\",\"\\u24C7\":\"R\",\"\\uFF32\":\"R\",\"\\u0154\":\"R\",\"\\u1E58\":\"R\",\"\\u0158\":\"R\",\"\\u0210\":\"R\",\"\\u0212\":\"R\",\"\\u1E5A\":\"R\",\"\\u1E5C\":\"R\",\"\\u0156\":\"R\",\"\\u1E5E\":\"R\",\"\\u024C\":\"R\",\"\\u2C64\":\"R\",\"\\uA75A\":\"R\",\"\\uA7A6\":\"R\",\"\\uA782\":\"R\",\"\\u24C8\":\"S\",\"\\uFF33\":\"S\",\"\\u1E9E\":\"S\",\"\\u015A\":\"S\",\"\\u1E64\":\"S\",\"\\u015C\":\"S\",\"\\u1E60\":\"S\",\"\\u0160\":\"S\",\"\\u1E66\":\"S\",\"\\u1E62\":\"S\",\"\\u1E68\":\"S\",\"\\u0218\":\"S\",\"\\u015E\":\"S\",\"\\u2C7E\":\"S\",\"\\uA7A8\":\"S\",\"\\uA784\":\"S\",\"\\u24C9\":\"T\",\"\\uFF34\":\"T\",\"\\u1E6A\":\"T\",\"\\u0164\":\"T\",\"\\u1E6C\":\"T\",\"\\u021A\":\"T\",\"\\u0162\":\"T\",\"\\u1E70\":\"T\",\"\\u1E6E\":\"T\",\"\\u0166\":\"T\",\"\\u01AC\":\"T\",\"\\u01AE\":\"T\",\"\\u023E\":\"T\",\"\\uA786\":\"T\",\"\\uA728\":\"TZ\",\"\\u24CA\":\"U\",\"\\uFF35\":\"U\",\"\\u00D9\":\"U\",\"\\u00DA\":\"U\",\"\\u00DB\":\"U\",\"\\u0168\":\"U\",\"\\u1E78\":\"U\",\"\\u016A\":\"U\",\"\\u1E7A\":\"U\",\"\\u016C\":\"U\",\"\\u00DC\":\"U\",\"\\u01DB\":\"U\",\"\\u01D7\":\"U\",\"\\u01D5\":\"U\",\"\\u01D9\":\"U\",\"\\u1EE6\":\"U\",\"\\u016E\":\"U\",\"\\u0170\":\"U\",\"\\u01D3\":\"U\",\"\\u0214\":\"U\",\"\\u0216\":\"U\",\"\\u01AF\":\"U\",\"\\u1EEA\":\"U\",\"\\u1EE8\":\"U\",\"\\u1EEE\":\"U\",\"\\u1EEC\":\"U\",\"\\u1EF0\":\"U\",\"\\u1EE4\":\"U\",\"\\u1E72\":\"U\",\"\\u0172\":\"U\",\"\\u1E76\":\"U\",\"\\u1E74\":\"U\",\"\\u0244\":\"U\",\"\\u24CB\":\"V\",\"\\uFF36\":\"V\",\"\\u1E7C\":\"V\",\"\\u1E7E\":\"V\",\"\\u01B2\":\"V\",\"\\uA75E\":\"V\",\"\\u0245\":\"V\",\"\\uA760\":\"VY\",\"\\u24CC\":\"W\",\"\\uFF37\":\"W\",\"\\u1E80\":\"W\",\"\\u1E82\":\"W\",\"\\u0174\":\"W\",\"\\u1E86\":\"W\",\"\\u1E84\":\"W\",\"\\u1E88\":\"W\",\"\\u2C72\":\"W\",\"\\u24CD\":\"X\",\"\\uFF38\":\"X\",\"\\u1E8A\":\"X\",\"\\u1E8C\":\"X\",\"\\u24CE\":\"Y\",\"\\uFF39\":\"Y\",\"\\u1EF2\":\"Y\",\"\\u00DD\":\"Y\",\"\\u0176\":\"Y\",\"\\u1EF8\":\"Y\",\"\\u0232\":\"Y\",\"\\u1E8E\":\"Y\",\"\\u0178\":\"Y\",\"\\u1EF6\":\"Y\",\"\\u1EF4\":\"Y\",\"\\u01B3\":\"Y\",\"\\u024E\":\"Y\",\"\\u1EFE\":\"Y\",\"\\u24CF\":\"Z\",\"\\uFF3A\":\"Z\",\"\\u0179\":\"Z\",\"\\u1E90\":\"Z\",\"\\u017B\":\"Z\",\"\\u017D\":\"Z\",\"\\u1E92\":\"Z\",\"\\u1E94\":\"Z\",\"\\u01B5\":\"Z\",\"\\u0224\":\"Z\",\"\\u2C7F\":\"Z\",\"\\u2C6B\":\"Z\",\"\\uA762\":\"Z\",\"\\u24D0\":\"a\",\"\\uFF41\":\"a\",\"\\u1E9A\":\"a\",\"\\u00E0\":\"a\",\"\\u00E1\":\"a\",\"\\u00E2\":\"a\",\"\\u1EA7\":\"a\",\"\\u1EA5\":\"a\",\"\\u1EAB\":\"a\",\"\\u1EA9\":\"a\",\"\\u00E3\":\"a\",\"\\u0101\":\"a\",\"\\u0103\":\"a\",\"\\u1EB1\":\"a\",\"\\u1EAF\":\"a\",\"\\u1EB5\":\"a\",\"\\u1EB3\":\"a\",\"\\u0227\":\"a\",\"\\u01E1\":\"a\",\"\\u00E4\":\"a\",\"\\u01DF\":\"a\",\"\\u1EA3\":\"a\",\"\\u00E5\":\"a\",\"\\u01FB\":\"a\",\"\\u01CE\":\"a\",\"\\u0201\":\"a\",\"\\u0203\":\"a\",\"\\u1EA1\":\"a\",\"\\u1EAD\":\"a\",\"\\u1EB7\":\"a\",\"\\u1E01\":\"a\",\"\\u0105\":\"a\",\"\\u2C65\":\"a\",\"\\u0250\":\"a\",\"\\uA733\":\"aa\",\"\\u00E6\":\"ae\",\"\\u01FD\":\"ae\",\"\\u01E3\":\"ae\",\"\\uA735\":\"ao\",\"\\uA737\":\"au\",\"\\uA739\":\"av\",\"\\uA73B\":\"av\",\"\\uA73D\":\"ay\",\"\\u24D1\":\"b\",\"\\uFF42\":\"b\",\"\\u1E03\":\"b\",\"\\u1E05\":\"b\",\"\\u1E07\":\"b\",\"\\u0180\":\"b\",\"\\u0183\":\"b\",\"\\u0253\":\"b\",\"\\u24D2\":\"c\",\"\\uFF43\":\"c\",\"\\u0107\":\"c\",\"\\u0109\":\"c\",\"\\u010B\":\"c\",\"\\u010D\":\"c\",\"\\u00E7\":\"c\",\"\\u1E09\":\"c\",\"\\u0188\":\"c\",\"\\u023C\":\"c\",\"\\uA73F\":\"c\",\"\\u2184\":\"c\",\"\\u24D3\":\"d\",\"\\uFF44\":\"d\",\"\\u1E0B\":\"d\",\"\\u010F\":\"d\",\"\\u1E0D\":\"d\",\"\\u1E11\":\"d\",\"\\u1E13\":\"d\",\"\\u1E0F\":\"d\",\"\\u0111\":\"d\",\"\\u018C\":\"d\",\"\\u0256\":\"d\",\"\\u0257\":\"d\",\"\\uA77A\":\"d\",\"\\u01F3\":\"dz\",\"\\u01C6\":\"dz\",\"\\u24D4\":\"e\",\"\\uFF45\":\"e\",\"\\u00E8\":\"e\",\"\\u00E9\":\"e\",\"\\u00EA\":\"e\",\"\\u1EC1\":\"e\",\"\\u1EBF\":\"e\",\"\\u1EC5\":\"e\",\"\\u1EC3\":\"e\",\"\\u1EBD\":\"e\",\"\\u0113\":\"e\",\"\\u1E15\":\"e\",\"\\u1E17\":\"e\",\"\\u0115\":\"e\",\"\\u0117\":\"e\",\"\\u00EB\":\"e\",\"\\u1EBB\":\"e\",\"\\u011B\":\"e\",\"\\u0205\":\"e\",\"\\u0207\":\"e\",\"\\u1EB9\":\"e\",\"\\u1EC7\":\"e\",\"\\u0229\":\"e\",\"\\u1E1D\":\"e\",\"\\u0119\":\"e\",\"\\u1E19\":\"e\",\"\\u1E1B\":\"e\",\"\\u0247\":\"e\",\"\\u025B\":\"e\",\"\\u01DD\":\"e\",\"\\u24D5\":\"f\",\"\\uFF46\":\"f\",\"\\u1E1F\":\"f\",\"\\u0192\":\"f\",\"\\uA77C\":\"f\",\"\\u24D6\":\"g\",\"\\uFF47\":\"g\",\"\\u01F5\":\"g\",\"\\u011D\":\"g\",\"\\u1E21\":\"g\",\"\\u011F\":\"g\",\"\\u0121\":\"g\",\"\\u01E7\":\"g\",\"\\u0123\":\"g\",\"\\u01E5\":\"g\",\"\\u0260\":\"g\",\"\\uA7A1\":\"g\",\"\\u1D79\":\"g\",\"\\uA77F\":\"g\",\"\\u24D7\":\"h\",\"\\uFF48\":\"h\",\"\\u0125\":\"h\",\"\\u1E23\":\"h\",\"\\u1E27\":\"h\",\"\\u021F\":\"h\",\"\\u1E25\":\"h\",\"\\u1E29\":\"h\",\"\\u1E2B\":\"h\",\"\\u1E96\":\"h\",\"\\u0127\":\"h\",\"\\u2C68\":\"h\",\"\\u2C76\":\"h\",\"\\u0265\":\"h\",\"\\u0195\":\"hv\",\"\\u24D8\":\"i\",\"\\uFF49\":\"i\",\"\\u00EC\":\"i\",\"\\u00ED\":\"i\",\"\\u00EE\":\"i\",\"\\u0129\":\"i\",\"\\u012B\":\"i\",\"\\u012D\":\"i\",\"\\u00EF\":\"i\",\"\\u1E2F\":\"i\",\"\\u1EC9\":\"i\",\"\\u01D0\":\"i\",\"\\u0209\":\"i\",\"\\u020B\":\"i\",\"\\u1ECB\":\"i\",\"\\u012F\":\"i\",\"\\u1E2D\":\"i\",\"\\u0268\":\"i\",\"\\u0131\":\"i\",\"\\u24D9\":\"j\",\"\\uFF4A\":\"j\",\"\\u0135\":\"j\",\"\\u01F0\":\"j\",\"\\u0249\":\"j\",\"\\u24DA\":\"k\",\"\\uFF4B\":\"k\",\"\\u1E31\":\"k\",\"\\u01E9\":\"k\",\"\\u1E33\":\"k\",\"\\u0137\":\"k\",\"\\u1E35\":\"k\",\"\\u0199\":\"k\",\"\\u2C6A\":\"k\",\"\\uA741\":\"k\",\"\\uA743\":\"k\",\"\\uA745\":\"k\",\"\\uA7A3\":\"k\",\"\\u24DB\":\"l\",\"\\uFF4C\":\"l\",\"\\u0140\":\"l\",\"\\u013A\":\"l\",\"\\u013E\":\"l\",\"\\u1E37\":\"l\",\"\\u1E39\":\"l\",\"\\u013C\":\"l\",\"\\u1E3D\":\"l\",\"\\u1E3B\":\"l\",\"\\u017F\":\"l\",\"\\u0142\":\"l\",\"\\u019A\":\"l\",\"\\u026B\":\"l\",\"\\u2C61\":\"l\",\"\\uA749\":\"l\",\"\\uA781\":\"l\",\"\\uA747\":\"l\",\"\\u01C9\":\"lj\",\"\\u24DC\":\"m\",\"\\uFF4D\":\"m\",\"\\u1E3F\":\"m\",\"\\u1E41\":\"m\",\"\\u1E43\":\"m\",\"\\u0271\":\"m\",\"\\u026F\":\"m\",\"\\u24DD\":\"n\",\"\\uFF4E\":\"n\",\"\\u01F9\":\"n\",\"\\u0144\":\"n\",\"\\u00F1\":\"n\",\"\\u1E45\":\"n\",\"\\u0148\":\"n\",\"\\u1E47\":\"n\",\"\\u0146\":\"n\",\"\\u1E4B\":\"n\",\"\\u1E49\":\"n\",\"\\u019E\":\"n\",\"\\u0272\":\"n\",\"\\u0149\":\"n\",\"\\uA791\":\"n\",\"\\uA7A5\":\"n\",\"\\u01CC\":\"nj\",\"\\u24DE\":\"o\",\"\\uFF4F\":\"o\",\"\\u00F2\":\"o\",\"\\u00F3\":\"o\",\"\\u00F4\":\"o\",\"\\u1ED3\":\"o\",\"\\u1ED1\":\"o\",\"\\u1ED7\":\"o\",\"\\u1ED5\":\"o\",\"\\u00F5\":\"o\",\"\\u1E4D\":\"o\",\"\\u022D\":\"o\",\"\\u1E4F\":\"o\",\"\\u014D\":\"o\",\"\\u1E51\":\"o\",\"\\u1E53\":\"o\",\"\\u014F\":\"o\",\"\\u022F\":\"o\",\"\\u0231\":\"o\",\"\\u00F6\":\"o\",\"\\u022B\":\"o\",\"\\u1ECF\":\"o\",\"\\u0151\":\"o\",\"\\u01D2\":\"o\",\"\\u020D\":\"o\",\"\\u020F\":\"o\",\"\\u01A1\":\"o\",\"\\u1EDD\":\"o\",\"\\u1EDB\":\"o\",\"\\u1EE1\":\"o\",\"\\u1EDF\":\"o\",\"\\u1EE3\":\"o\",\"\\u1ECD\":\"o\",\"\\u1ED9\":\"o\",\"\\u01EB\":\"o\",\"\\u01ED\":\"o\",\"\\u00F8\":\"o\",\"\\u01FF\":\"o\",\"\\u0254\":\"o\",\"\\uA74B\":\"o\",\"\\uA74D\":\"o\",\"\\u0275\":\"o\",\"\\u01A3\":\"oi\",\"\\u0223\":\"ou\",\"\\uA74F\":\"oo\",\"\\u24DF\":\"p\",\"\\uFF50\":\"p\",\"\\u1E55\":\"p\",\"\\u1E57\":\"p\",\"\\u01A5\":\"p\",\"\\u1D7D\":\"p\",\"\\uA751\":\"p\",\"\\uA753\":\"p\",\"\\uA755\":\"p\",\"\\u24E0\":\"q\",\"\\uFF51\":\"q\",\"\\u024B\":\"q\",\"\\uA757\":\"q\",\"\\uA759\":\"q\",\"\\u24E1\":\"r\",\"\\uFF52\":\"r\",\"\\u0155\":\"r\",\"\\u1E59\":\"r\",\"\\u0159\":\"r\",\"\\u0211\":\"r\",\"\\u0213\":\"r\",\"\\u1E5B\":\"r\",\"\\u1E5D\":\"r\",\"\\u0157\":\"r\",\"\\u1E5F\":\"r\",\"\\u024D\":\"r\",\"\\u027D\":\"r\",\"\\uA75B\":\"r\",\"\\uA7A7\":\"r\",\"\\uA783\":\"r\",\"\\u24E2\":\"s\",\"\\uFF53\":\"s\",\"\\u00DF\":\"s\",\"\\u015B\":\"s\",\"\\u1E65\":\"s\",\"\\u015D\":\"s\",\"\\u1E61\":\"s\",\"\\u0161\":\"s\",\"\\u1E67\":\"s\",\"\\u1E63\":\"s\",\"\\u1E69\":\"s\",\"\\u0219\":\"s\",\"\\u015F\":\"s\",\"\\u023F\":\"s\",\"\\uA7A9\":\"s\",\"\\uA785\":\"s\",\"\\u1E9B\":\"s\",\"\\u24E3\":\"t\",\"\\uFF54\":\"t\",\"\\u1E6B\":\"t\",\"\\u1E97\":\"t\",\"\\u0165\":\"t\",\"\\u1E6D\":\"t\",\"\\u021B\":\"t\",\"\\u0163\":\"t\",\"\\u1E71\":\"t\",\"\\u1E6F\":\"t\",\"\\u0167\":\"t\",\"\\u01AD\":\"t\",\"\\u0288\":\"t\",\"\\u2C66\":\"t\",\"\\uA787\":\"t\",\"\\uA729\":\"tz\",\"\\u24E4\":\"u\",\"\\uFF55\":\"u\",\"\\u00F9\":\"u\",\"\\u00FA\":\"u\",\"\\u00FB\":\"u\",\"\\u0169\":\"u\",\"\\u1E79\":\"u\",\"\\u016B\":\"u\",\"\\u1E7B\":\"u\",\"\\u016D\":\"u\",\"\\u00FC\":\"u\",\"\\u01DC\":\"u\",\"\\u01D8\":\"u\",\"\\u01D6\":\"u\",\"\\u01DA\":\"u\",\"\\u1EE7\":\"u\",\"\\u016F\":\"u\",\"\\u0171\":\"u\",\"\\u01D4\":\"u\",\"\\u0215\":\"u\",\"\\u0217\":\"u\",\"\\u01B0\":\"u\",\"\\u1EEB\":\"u\",\"\\u1EE9\":\"u\",\"\\u1EEF\":\"u\",\"\\u1EED\":\"u\",\"\\u1EF1\":\"u\",\"\\u1EE5\":\"u\",\"\\u1E73\":\"u\",\"\\u0173\":\"u\",\"\\u1E77\":\"u\",\"\\u1E75\":\"u\",\"\\u0289\":\"u\",\"\\u24E5\":\"v\",\"\\uFF56\":\"v\",\"\\u1E7D\":\"v\",\"\\u1E7F\":\"v\",\"\\u028B\":\"v\",\"\\uA75F\":\"v\",\"\\u028C\":\"v\",\"\\uA761\":\"vy\",\"\\u24E6\":\"w\",\"\\uFF57\":\"w\",\"\\u1E81\":\"w\",\"\\u1E83\":\"w\",\"\\u0175\":\"w\",\"\\u1E87\":\"w\",\"\\u1E85\":\"w\",\"\\u1E98\":\"w\",\"\\u1E89\":\"w\",\"\\u2C73\":\"w\",\"\\u24E7\":\"x\",\"\\uFF58\":\"x\",\"\\u1E8B\":\"x\",\"\\u1E8D\":\"x\",\"\\u24E8\":\"y\",\"\\uFF59\":\"y\",\"\\u1EF3\":\"y\",\"\\u00FD\":\"y\",\"\\u0177\":\"y\",\"\\u1EF9\":\"y\",\"\\u0233\":\"y\",\"\\u1E8F\":\"y\",\"\\u00FF\":\"y\",\"\\u1EF7\":\"y\",\"\\u1E99\":\"y\",\"\\u1EF5\":\"y\",\"\\u01B4\":\"y\",\"\\u024F\":\"y\",\"\\u1EFF\":\"y\",\"\\u24E9\":\"z\",\"\\uFF5A\":\"z\",\"\\u017A\":\"z\",\"\\u1E91\":\"z\",\"\\u017C\":\"z\",\"\\u017E\":\"z\",\"\\u1E93\":\"z\",\"\\u1E95\":\"z\",\"\\u01B6\":\"z\",\"\\u0225\":\"z\",\"\\u0240\":\"z\",\"\\u2C6C\":\"z\",\"\\uA763\":\"z\",\"\\u0386\":\"\\u0391\",\"\\u0388\":\"\\u0395\",\"\\u0389\":\"\\u0397\",\"\\u038A\":\"\\u0399\",\"\\u03AA\":\"\\u0399\",\"\\u038C\":\"\\u039F\",\"\\u038E\":\"\\u03A5\",\"\\u03AB\":\"\\u03A5\",\"\\u038F\":\"\\u03A9\",\"\\u03AC\":\"\\u03B1\",\"\\u03AD\":\"\\u03B5\",\"\\u03AE\":\"\\u03B7\",\"\\u03AF\":\"\\u03B9\",\"\\u03CA\":\"\\u03B9\",\"\\u0390\":\"\\u03B9\",\"\\u03CC\":\"\\u03BF\",\"\\u03CD\":\"\\u03C5\",\"\\u03CB\":\"\\u03C5\",\"\\u03B0\":\"\\u03C5\",\"\\u03C9\":\"\\u03C9\",\"\\u03C2\":\"\\u03C3\"};\n\n    $document = $(document);\n\n    nextUid=(function() { var counter=1; return function() { return counter++; }; }());\n\n\n    function reinsertElement(element) {\n        var placeholder = $(document.createTextNode(''));\n\n        element.before(placeholder);\n        placeholder.before(element);\n        placeholder.remove();\n    }\n\n    function stripDiacritics(str) {\n        // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n        function match(a) {\n            return DIACRITICS[a] || a;\n        }\n\n        return str.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function indexOf(value, array) {\n        var i = 0, l = array.length;\n        for (; i < l; i = i + 1) {\n            if (equal(value, array[i])) return i;\n        }\n        return -1;\n    }\n\n    function measureScrollbar () {\n        var $template = $( MEASURE_SCROLLBAR_TEMPLATE );\n        $template.appendTo('body');\n\n        var dim = {\n            width: $template.width() - $template[0].clientWidth,\n            height: $template.height() - $template[0].clientHeight\n        };\n        $template.remove();\n\n        return dim;\n    }\n\n    /**\n     * Compares equality of a and b\n     * @param a\n     * @param b\n     */\n    function equal(a, b) {\n        if (a === b) return true;\n        if (a === undefined || b === undefined) return false;\n        if (a === null || b === null) return false;\n        // Check whether 'a' or 'b' is a string (primitive or object).\n        // The concatenation of an empty string (+'') converts its argument to a string's primitive.\n        if (a.constructor === String) return a+'' === b+''; // a+'' - in case 'a' is a String object\n        if (b.constructor === String) return b+'' === a+''; // b+'' - in case 'b' is a String object\n        return false;\n    }\n\n    /**\n     * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty\n     * strings\n     * @param string\n     * @param separator\n     */\n    function splitVal(string, separator) {\n        var val, i, l;\n        if (string === null || string.length < 1) return [];\n        val = string.split(separator);\n        for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]);\n        return val;\n    }\n\n    function getSideBorderPadding(element) {\n        return element.outerWidth(false) - element.width();\n    }\n\n    function installKeyUpChangeEvent(element) {\n        var key=\"keyup-change-value\";\n        element.on(\"keydown\", function () {\n            if ($.data(element, key) === undefined) {\n                $.data(element, key, element.val());\n            }\n        });\n        element.on(\"keyup\", function () {\n            var val= $.data(element, key);\n            if (val !== undefined && element.val() !== val) {\n                $.removeData(element, key);\n                element.trigger(\"keyup-change\");\n            }\n        });\n    }\n\n\n    /**\n     * filters mouse events so an event is fired only if the mouse moved.\n     *\n     * filters out mouse events that occur when mouse is stationary but\n     * the elements under the pointer are scrolled.\n     */\n    function installFilteredMouseMove(element) {\n        element.on(\"mousemove\", function (e) {\n            var lastpos = lastMousePosition;\n            if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {\n                $(e.target).trigger(\"mousemove-filtered\", e);\n            }\n        });\n    }\n\n    /**\n     * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made\n     * within the last quietMillis milliseconds.\n     *\n     * @param quietMillis number of milliseconds to wait before invoking fn\n     * @param fn function to be debounced\n     * @param ctx object to be used as this reference within fn\n     * @return debounced version of fn\n     */\n    function debounce(quietMillis, fn, ctx) {\n        ctx = ctx || undefined;\n        var timeout;\n        return function () {\n            var args = arguments;\n            window.clearTimeout(timeout);\n            timeout = window.setTimeout(function() {\n                fn.apply(ctx, args);\n            }, quietMillis);\n        };\n    }\n\n    function installDebouncedScroll(threshold, element) {\n        var notify = debounce(threshold, function (e) { element.trigger(\"scroll-debounced\", e);});\n        element.on(\"scroll\", function (e) {\n            if (indexOf(e.target, element.get()) >= 0) notify(e);\n        });\n    }\n\n    function focus($el) {\n        if ($el[0] === document.activeElement) return;\n\n        /* set the focus in a 0 timeout - that way the focus is set after the processing\n            of the current event has finished - which seems like the only reliable way\n            to set focus */\n        window.setTimeout(function() {\n            var el=$el[0], pos=$el.val().length, range;\n\n            $el.focus();\n\n            /* make sure el received focus so we do not error out when trying to manipulate the caret.\n                sometimes modals or others listeners may steal it after its set */\n            var isVisible = (el.offsetWidth > 0 || el.offsetHeight > 0);\n            if (isVisible && el === document.activeElement) {\n\n                /* after the focus is set move the caret to the end, necessary when we val()\n                    just before setting focus */\n                if(el.setSelectionRange)\n                {\n                    el.setSelectionRange(pos, pos);\n                }\n                else if (el.createTextRange) {\n                    range = el.createTextRange();\n                    range.collapse(false);\n                    range.select();\n                }\n            }\n        }, 0);\n    }\n\n    function getCursorInfo(el) {\n        el = $(el)[0];\n        var offset = 0;\n        var length = 0;\n        if ('selectionStart' in el) {\n            offset = el.selectionStart;\n            length = el.selectionEnd - offset;\n        } else if ('selection' in document) {\n            el.focus();\n            var sel = document.selection.createRange();\n            length = document.selection.createRange().text.length;\n            sel.moveStart('character', -el.value.length);\n            offset = sel.text.length - length;\n        }\n        return { offset: offset, length: length };\n    }\n\n    function killEvent(event) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n    function killEventImmediately(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n    }\n\n    function measureTextWidth(e) {\n        if (!sizer){\n            var style = e[0].currentStyle || window.getComputedStyle(e[0], null);\n            sizer = $(document.createElement(\"div\")).css({\n                position: \"absolute\",\n                left: \"-10000px\",\n                top: \"-10000px\",\n                display: \"none\",\n                fontSize: style.fontSize,\n                fontFamily: style.fontFamily,\n                fontStyle: style.fontStyle,\n                fontWeight: style.fontWeight,\n                letterSpacing: style.letterSpacing,\n                textTransform: style.textTransform,\n                whiteSpace: \"nowrap\"\n            });\n            sizer.attr(\"class\",\"select2-sizer\");\n            $(\"body\").append(sizer);\n        }\n        sizer.text(e.val());\n        return sizer.width();\n    }\n\n    function syncCssClasses(dest, src, adapter) {\n        var classes, replacements = [], adapted;\n\n        classes = $.trim(dest.attr(\"class\"));\n\n        if (classes) {\n            classes = '' + classes; // for IE which returns object\n\n            $(classes.split(/\\s+/)).each2(function() {\n                if (this.indexOf(\"select2-\") === 0) {\n                    replacements.push(this);\n                }\n            });\n        }\n\n        classes = $.trim(src.attr(\"class\"));\n\n        if (classes) {\n            classes = '' + classes; // for IE which returns object\n\n            $(classes.split(/\\s+/)).each2(function() {\n                if (this.indexOf(\"select2-\") !== 0) {\n                    adapted = adapter(this);\n\n                    if (adapted) {\n                        replacements.push(adapted);\n                    }\n                }\n            });\n        }\n\n        dest.attr(\"class\", replacements.join(\" \"));\n    }\n\n\n    function markMatch(text, term, markup, escapeMarkup) {\n        var match=stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())),\n            tl=term.length;\n\n        if (match<0) {\n            markup.push(escapeMarkup(text));\n            return;\n        }\n\n        markup.push(escapeMarkup(text.substring(0, match)));\n        markup.push(\"<span class='select2-match'>\");\n        markup.push(escapeMarkup(text.substring(match, match + tl)));\n        markup.push(\"</span>\");\n        markup.push(escapeMarkup(text.substring(match + tl, text.length)));\n    }\n\n    function defaultEscapeMarkup(markup) {\n        var replace_map = {\n            '\\\\': '&#92;',\n            '&': '&amp;',\n            '<': '&lt;',\n            '>': '&gt;',\n            '\"': '&quot;',\n            \"'\": '&#39;',\n            \"/\": '&#47;'\n        };\n\n        return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n            return replace_map[match];\n        });\n    }\n\n    /**\n     * Produces an ajax-based query function\n     *\n     * @param options object containing configuration parameters\n     * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax\n     * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax\n     * @param options.url url for the data\n     * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url.\n     * @param options.dataType request data type: ajax, jsonp, other datatypes supported by jQuery's $.ajax function or the transport function if specified\n     * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often\n     * @param options.results a function(remoteData, pageNumber, query) that converts data returned form the remote request to the format expected by Select2.\n     *      The expected format is an object containing the following keys:\n     *      results array of objects that will be used as choices\n     *      more (optional) boolean indicating whether there are more results available\n     *      Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true}\n     */\n    function ajax(options) {\n        var timeout, // current scheduled but not yet executed request\n            handler = null,\n            quietMillis = options.quietMillis || 100,\n            ajaxUrl = options.url,\n            self = this;\n\n        return function (query) {\n            window.clearTimeout(timeout);\n            timeout = window.setTimeout(function () {\n                var data = options.data, // ajax data function\n                    url = ajaxUrl, // ajax url string or function\n                    transport = options.transport || $.fn.select2.ajaxDefaults.transport,\n                    // deprecated - to be removed in 4.0  - use params instead\n                    deprecated = {\n                        type: options.type || 'GET', // set type of request (GET or POST)\n                        cache: options.cache || false,\n                        jsonpCallback: options.jsonpCallback||undefined,\n                        dataType: options.dataType||\"json\"\n                    },\n                    params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated);\n\n                data = data ? data.call(self, query.term, query.page, query.context) : null;\n                url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url;\n\n                if (handler && typeof handler.abort === \"function\") { handler.abort(); }\n\n                if (options.params) {\n                    if ($.isFunction(options.params)) {\n                        $.extend(params, options.params.call(self));\n                    } else {\n                        $.extend(params, options.params);\n                    }\n                }\n\n                $.extend(params, {\n                    url: url,\n                    dataType: options.dataType,\n                    data: data,\n                    success: function (data) {\n                        // TODO - replace query.page with query so users have access to term, page, etc.\n                        // added query as third paramter to keep backwards compatibility\n                        var results = options.results(data, query.page, query);\n                        query.callback(results);\n                    },\n                    error: function(jqXHR, textStatus, errorThrown){\n                        var results = {\n                            hasError: true,\n                            jqXHR: jqXHR,\n                            textStatus: textStatus,\n                            errorThrown: errorThrown,\n                        };\n\n                        query.callback(results);\n                    }\n                });\n                handler = transport.call(self, params);\n            }, quietMillis);\n        };\n    }\n\n    /**\n     * Produces a query function that works with a local array\n     *\n     * @param options object containing configuration parameters. The options parameter can either be an array or an\n     * object.\n     *\n     * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys.\n     *\n     * If the object form is used it is assumed that it contains 'data' and 'text' keys. The 'data' key should contain\n     * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text'\n     * key can either be a String in which case it is expected that each element in the 'data' array has a key with the\n     * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract\n     * the text.\n     */\n    function local(options) {\n        var data = options, // data elements\n            dataText,\n            tmp,\n            text = function (item) { return \"\"+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search\n\n         if ($.isArray(data)) {\n            tmp = data;\n            data = { results: tmp };\n        }\n\n         if ($.isFunction(data) === false) {\n            tmp = data;\n            data = function() { return tmp; };\n        }\n\n        var dataItem = data();\n        if (dataItem.text) {\n            text = dataItem.text;\n            // if text is not a function we assume it to be a key name\n            if (!$.isFunction(text)) {\n                dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available\n                text = function (item) { return item[dataText]; };\n            }\n        }\n\n        return function (query) {\n            var t = query.term, filtered = { results: [] }, process;\n            if (t === \"\") {\n                query.callback(data());\n                return;\n            }\n\n            process = function(datum, collection) {\n                var group, attr;\n                datum = datum[0];\n                if (datum.children) {\n                    group = {};\n                    for (attr in datum) {\n                        if (datum.hasOwnProperty(attr)) group[attr]=datum[attr];\n                    }\n                    group.children=[];\n                    $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); });\n                    if (group.children.length || query.matcher(t, text(group), datum)) {\n                        collection.push(group);\n                    }\n                } else {\n                    if (query.matcher(t, text(datum), datum)) {\n                        collection.push(datum);\n                    }\n                }\n            };\n\n            $(data().results).each2(function(i, datum) { process(datum, filtered.results); });\n            query.callback(filtered);\n        };\n    }\n\n    // TODO javadoc\n    function tags(data) {\n        var isFunc = $.isFunction(data);\n        return function (query) {\n            var t = query.term, filtered = {results: []};\n            var result = isFunc ? data(query) : data;\n            if ($.isArray(result)) {\n                $(result).each(function () {\n                    var isObject = this.text !== undefined,\n                        text = isObject ? this.text : this;\n                    if (t === \"\" || query.matcher(t, text)) {\n                        filtered.results.push(isObject ? this : {id: this, text: this});\n                    }\n                });\n                query.callback(filtered);\n            }\n        };\n    }\n\n    /**\n     * Checks if the formatter function should be used.\n     *\n     * Throws an error if it is not a function. Returns true if it should be used,\n     * false if no formatting should be performed.\n     *\n     * @param formatter\n     */\n    function checkFormatter(formatter, formatterName) {\n        if ($.isFunction(formatter)) return true;\n        if (!formatter) return false;\n        if (typeof(formatter) === 'string') return true;\n        throw new Error(formatterName +\" must be a string, function, or falsy value\");\n    }\n\n  /**\n   * Returns a given value\n   * If given a function, returns its output\n   *\n   * @param val string|function\n   * @param context value of \"this\" to be passed to function\n   * @returns {*}\n   */\n    function evaluate(val, context) {\n        if ($.isFunction(val)) {\n            var args = Array.prototype.slice.call(arguments, 2);\n            return val.apply(context, args);\n        }\n        return val;\n    }\n\n    function countResults(results) {\n        var count = 0;\n        $.each(results, function(i, item) {\n            if (item.children) {\n                count += countResults(item.children);\n            } else {\n                count++;\n            }\n        });\n        return count;\n    }\n\n    /**\n     * Default tokenizer. This function uses breaks the input on substring match of any string from the\n     * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those\n     * two options have to be defined in order for the tokenizer to work.\n     *\n     * @param input text user has typed so far or pasted into the search field\n     * @param selection currently selected choices\n     * @param selectCallback function(choice) callback tho add the choice to selection\n     * @param opts select2's opts\n     * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value\n     */\n    function defaultTokenizer(input, selection, selectCallback, opts) {\n        var original = input, // store the original so we can compare and know if we need to tell the search to update its text\n            dupe = false, // check for whether a token we extracted represents a duplicate selected choice\n            token, // token\n            index, // position at which the separator was found\n            i, l, // looping variables\n            separator; // the matched separator\n\n        if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined;\n\n        while (true) {\n            index = -1;\n\n            for (i = 0, l = opts.tokenSeparators.length; i < l; i++) {\n                separator = opts.tokenSeparators[i];\n                index = input.indexOf(separator);\n                if (index >= 0) break;\n            }\n\n            if (index < 0) break; // did not find any token separator in the input string, bail\n\n            token = input.substring(0, index);\n            input = input.substring(index + separator.length);\n\n            if (token.length > 0) {\n                token = opts.createSearchChoice.call(this, token, selection);\n                if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) {\n                    dupe = false;\n                    for (i = 0, l = selection.length; i < l; i++) {\n                        if (equal(opts.id(token), opts.id(selection[i]))) {\n                            dupe = true; break;\n                        }\n                    }\n\n                    if (!dupe) selectCallback(token);\n                }\n            }\n        }\n\n        if (original!==input) return input;\n    }\n\n    function cleanupJQueryElements() {\n        var self = this;\n\n        $.each(arguments, function (i, element) {\n            self[element].remove();\n            self[element] = null;\n        });\n    }\n\n    /**\n     * Creates a new class\n     *\n     * @param superClass\n     * @param methods\n     */\n    function clazz(SuperClass, methods) {\n        var constructor = function () {};\n        constructor.prototype = new SuperClass;\n        constructor.prototype.constructor = constructor;\n        constructor.prototype.parent = SuperClass.prototype;\n        constructor.prototype = $.extend(constructor.prototype, methods);\n        return constructor;\n    }\n\n    AbstractSelect2 = clazz(Object, {\n\n        // abstract\n        bind: function (func) {\n            var self = this;\n            return function () {\n                func.apply(self, arguments);\n            };\n        },\n\n        // abstract\n        init: function (opts) {\n            var results, search, resultsSelector = \".select2-results\";\n\n            // prepare options\n            this.opts = opts = this.prepareOpts(opts);\n\n            this.id=opts.id;\n\n            // destroy if called on an existing component\n            if (opts.element.data(\"select2\") !== undefined &&\n                opts.element.data(\"select2\") !== null) {\n                opts.element.data(\"select2\").destroy();\n            }\n\n            this.container = this.createContainer();\n\n            this.liveRegion = $(\"<span>\", {\n                    role: \"status\",\n                    \"aria-live\": \"polite\"\n                })\n                .addClass(\"select2-hidden-accessible\")\n                .appendTo(document.body);\n\n            this.containerId=\"s2id_\"+(opts.element.attr(\"id\") || \"autogen\"+nextUid());\n            this.containerEventName= this.containerId\n                .replace(/([.])/g, '_')\n                .replace(/([;&,\\-\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1');\n            this.container.attr(\"id\", this.containerId);\n\n            this.container.attr(\"title\", opts.element.attr(\"title\"));\n\n            this.body = $(\"body\");\n\n            syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);\n\n            this.container.attr(\"style\", opts.element.attr(\"style\"));\n            this.container.css(evaluate(opts.containerCss, this.opts.element));\n            this.container.addClass(evaluate(opts.containerCssClass, this.opts.element));\n\n            this.elementTabIndex = this.opts.element.attr(\"tabindex\");\n\n            // swap container for the element\n            this.opts.element\n                .data(\"select2\", this)\n                .attr(\"tabindex\", \"-1\")\n                .before(this.container)\n                .on(\"click.select2\", killEvent); // do not leak click events\n\n            this.container.data(\"select2\", this);\n\n            this.dropdown = this.container.find(\".select2-drop\");\n\n            syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);\n\n            this.dropdown.addClass(evaluate(opts.dropdownCssClass, this.opts.element));\n            this.dropdown.data(\"select2\", this);\n            this.dropdown.on(\"click\", killEvent);\n\n            this.results = results = this.container.find(resultsSelector);\n            this.search = search = this.container.find(\"input.select2-input\");\n\n            this.queryCount = 0;\n            this.resultsPage = 0;\n            this.context = null;\n\n            // initialize the container\n            this.initContainer();\n\n            this.container.on(\"click\", killEvent);\n\n            installFilteredMouseMove(this.results);\n\n            this.dropdown.on(\"mousemove-filtered\", resultsSelector, this.bind(this.highlightUnderEvent));\n            this.dropdown.on(\"touchstart touchmove touchend\", resultsSelector, this.bind(function (event) {\n                this._touchEvent = true;\n                this.highlightUnderEvent(event);\n            }));\n            this.dropdown.on(\"touchmove\", resultsSelector, this.bind(this.touchMoved));\n            this.dropdown.on(\"touchstart touchend\", resultsSelector, this.bind(this.clearTouchMoved));\n\n            // Waiting for a click event on touch devices to select option and hide dropdown\n            // otherwise click will be triggered on an underlying element\n            this.dropdown.on('click', this.bind(function (event) {\n                if (this._touchEvent) {\n                    this._touchEvent = false;\n                    this.selectHighlighted();\n                }\n            }));\n\n            installDebouncedScroll(80, this.results);\n            this.dropdown.on(\"scroll-debounced\", resultsSelector, this.bind(this.loadMoreIfNeeded));\n\n            // do not propagate change event from the search field out of the component\n            $(this.container).on(\"change\", \".select2-input\", function(e) {e.stopPropagation();});\n            $(this.dropdown).on(\"change\", \".select2-input\", function(e) {e.stopPropagation();});\n\n            // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel\n            if ($.fn.mousewheel) {\n                results.mousewheel(function (e, delta, deltaX, deltaY) {\n                    var top = results.scrollTop();\n                    if (deltaY > 0 && top - deltaY <= 0) {\n                        results.scrollTop(0);\n                        killEvent(e);\n                    } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) {\n                        results.scrollTop(results.get(0).scrollHeight - results.height());\n                        killEvent(e);\n                    }\n                });\n            }\n\n            installKeyUpChangeEvent(search);\n            search.on(\"keyup-change input paste\", this.bind(this.updateResults));\n            search.on(\"focus\", function () { search.addClass(\"select2-focused\"); });\n            search.on(\"blur\", function () { search.removeClass(\"select2-focused\");});\n\n            this.dropdown.on(\"mouseup\", resultsSelector, this.bind(function (e) {\n                if ($(e.target).closest(\".select2-result-selectable\").length > 0) {\n                    this.highlightUnderEvent(e);\n                    this.selectHighlighted(e);\n                }\n            }));\n\n            // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening\n            // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's\n            // dom it will trigger the popup close, which is not what we want\n            // focusin can cause focus wars between modals and select2 since the dropdown is outside the modal.\n            this.dropdown.on(\"click mouseup mousedown touchstart touchend focusin\", function (e) { e.stopPropagation(); });\n\n            this.nextSearchTerm = undefined;\n\n            if ($.isFunction(this.opts.initSelection)) {\n                // initialize selection based on the current value of the source element\n                this.initSelection();\n\n                // if the user has provided a function that can set selection based on the value of the source element\n                // we monitor the change event on the element and trigger it, allowing for two way synchronization\n                this.monitorSource();\n            }\n\n            if (opts.maximumInputLength !== null) {\n                this.search.attr(\"maxlength\", opts.maximumInputLength);\n            }\n\n            var disabled = opts.element.prop(\"disabled\");\n            if (disabled === undefined) disabled = false;\n            this.enable(!disabled);\n\n            var readonly = opts.element.prop(\"readonly\");\n            if (readonly === undefined) readonly = false;\n            this.readonly(readonly);\n\n            // Calculate size of scrollbar\n            scrollBarDimensions = scrollBarDimensions || measureScrollbar();\n\n            this.autofocus = opts.element.prop(\"autofocus\");\n            opts.element.prop(\"autofocus\", false);\n            if (this.autofocus) this.focus();\n\n            this.search.attr(\"placeholder\", opts.searchInputPlaceholder);\n        },\n\n        // abstract\n        destroy: function () {\n            var element=this.opts.element, select2 = element.data(\"select2\"), self = this;\n\n            this.close();\n\n            if (element.length && element[0].detachEvent) {\n                element.each(function () {\n                    this.detachEvent(\"onpropertychange\", self._sync);\n                });\n            }\n            if (this.propertyObserver) {\n                this.propertyObserver.disconnect();\n                this.propertyObserver = null;\n            }\n            this._sync = null;\n\n            if (select2 !== undefined) {\n                select2.container.remove();\n                select2.liveRegion.remove();\n                select2.dropdown.remove();\n                element\n                    .removeClass(\"select2-offscreen\")\n                    .removeData(\"select2\")\n                    .off(\".select2\")\n                    .prop(\"autofocus\", this.autofocus || false);\n                if (this.elementTabIndex) {\n                    element.attr({tabindex: this.elementTabIndex});\n                } else {\n                    element.removeAttr(\"tabindex\");\n                }\n                element.show();\n            }\n\n            cleanupJQueryElements.call(this,\n                \"container\",\n                \"liveRegion\",\n                \"dropdown\",\n                \"results\",\n                \"search\"\n            );\n        },\n\n        // abstract\n        optionToData: function(element) {\n            if (element.is(\"option\")) {\n                return {\n                    id:element.prop(\"value\"),\n                    text:element.text(),\n                    element: element.get(),\n                    css: element.attr(\"class\"),\n                    disabled: element.prop(\"disabled\"),\n                    locked: equal(element.attr(\"locked\"), \"locked\") || equal(element.data(\"locked\"), true)\n                };\n            } else if (element.is(\"optgroup\")) {\n                return {\n                    text:element.attr(\"label\"),\n                    children:[],\n                    element: element.get(),\n                    css: element.attr(\"class\")\n                };\n            }\n        },\n\n        // abstract\n        prepareOpts: function (opts) {\n            var element, select, idKey, ajaxUrl, self = this;\n\n            element = opts.element;\n\n            if (element.get(0).tagName.toLowerCase() === \"select\") {\n                this.select = select = opts.element;\n            }\n\n            if (select) {\n                // these options are not allowed when attached to a select because they are picked up off the element itself\n                $.each([\"id\", \"multiple\", \"ajax\", \"query\", \"createSearchChoice\", \"initSelection\", \"data\", \"tags\"], function () {\n                    if (this in opts) {\n                        throw new Error(\"Option '\" + this + \"' is not allowed for Select2 when attached to a <select> element.\");\n                    }\n                });\n            }\n\n            opts = $.extend({}, {\n                populateResults: function(container, results, query) {\n                    var populate, id=this.opts.id, liveRegion=this.liveRegion;\n\n                    populate=function(results, container, depth) {\n\n                        var i, l, result, selectable, disabled, compound, node, label, innerContainer, formatted;\n\n                        results = opts.sortResults(results, container, query);\n\n                        // collect the created nodes for bulk append\n                        var nodes = [];\n                        for (i = 0, l = results.length; i < l; i = i + 1) {\n\n                            result=results[i];\n\n                            disabled = (result.disabled === true);\n                            selectable = (!disabled) && (id(result) !== undefined);\n\n                            compound=result.children && result.children.length > 0;\n\n                            node=$(\"<li></li>\");\n                            node.addClass(\"select2-results-dept-\"+depth);\n                            node.addClass(\"select2-result\");\n                            node.addClass(selectable ? \"select2-result-selectable\" : \"select2-result-unselectable\");\n                            if (disabled) { node.addClass(\"select2-disabled\"); }\n                            if (compound) { node.addClass(\"select2-result-with-children\"); }\n                            node.addClass(self.opts.formatResultCssClass(result));\n                            node.attr(\"role\", \"presentation\");\n\n                            label=$(document.createElement(\"div\"));\n                            label.addClass(\"select2-result-label\");\n                            label.attr(\"id\", \"select2-result-label-\" + nextUid());\n                            label.attr(\"role\", \"option\");\n\n                            formatted=opts.formatResult(result, label, query, self.opts.escapeMarkup);\n                            if (formatted!==undefined) {\n                                label.html(formatted);\n                                node.append(label);\n                            }\n\n\n                            if (compound) {\n\n                                innerContainer=$(\"<ul></ul>\");\n                                innerContainer.addClass(\"select2-result-sub\");\n                                populate(result.children, innerContainer, depth+1);\n                                node.append(innerContainer);\n                            }\n\n                            node.data(\"select2-data\", result);\n                            nodes.push(node[0]);\n                        }\n\n                        // bulk append the created nodes\n                        container.append(nodes);\n                        liveRegion.text(opts.formatMatches(results.length));\n                    };\n\n                    populate(results, container, 0);\n                }\n            }, $.fn.select2.defaults, opts);\n\n            if (typeof(opts.id) !== \"function\") {\n                idKey = opts.id;\n                opts.id = function (e) { return e[idKey]; };\n            }\n\n            if ($.isArray(opts.element.data(\"select2Tags\"))) {\n                if (\"tags\" in opts) {\n                    throw \"tags specified as both an attribute 'data-select2-tags' and in options of Select2 \" + opts.element.attr(\"id\");\n                }\n                opts.tags=opts.element.data(\"select2Tags\");\n            }\n\n            if (select) {\n                opts.query = this.bind(function (query) {\n                    var data = { results: [], more: false },\n                        term = query.term,\n                        children, placeholderOption, process;\n\n                    process=function(element, collection) {\n                        var group;\n                        if (element.is(\"option\")) {\n                            if (query.matcher(term, element.text(), element)) {\n                                collection.push(self.optionToData(element));\n                            }\n                        } else if (element.is(\"optgroup\")) {\n                            group=self.optionToData(element);\n                            element.children().each2(function(i, elm) { process(elm, group.children); });\n                            if (group.children.length>0) {\n                                collection.push(group);\n                            }\n                        }\n                    };\n\n                    children=element.children();\n\n                    // ignore the placeholder option if there is one\n                    if (this.getPlaceholder() !== undefined && children.length > 0) {\n                        placeholderOption = this.getPlaceholderOption();\n                        if (placeholderOption) {\n                            children=children.not(placeholderOption);\n                        }\n                    }\n\n                    children.each2(function(i, elm) { process(elm, data.results); });\n\n                    query.callback(data);\n                });\n                // this is needed because inside val() we construct choices from options and their id is hardcoded\n                opts.id=function(e) { return e.id; };\n            } else {\n                if (!(\"query\" in opts)) {\n\n                    if (\"ajax\" in opts) {\n                        ajaxUrl = opts.element.data(\"ajax-url\");\n                        if (ajaxUrl && ajaxUrl.length > 0) {\n                            opts.ajax.url = ajaxUrl;\n                        }\n                        opts.query = ajax.call(opts.element, opts.ajax);\n                    } else if (\"data\" in opts) {\n                        opts.query = local(opts.data);\n                    } else if (\"tags\" in opts) {\n                        opts.query = tags(opts.tags);\n                        if (opts.createSearchChoice === undefined) {\n                            opts.createSearchChoice = function (term) { return {id: $.trim(term), text: $.trim(term)}; };\n                        }\n                        if (opts.initSelection === undefined) {\n                            opts.initSelection = function (element, callback) {\n                                var data = [];\n                                $(splitVal(element.val(), opts.separator)).each(function () {\n                                    var obj = { id: this, text: this },\n                                        tags = opts.tags;\n                                    if ($.isFunction(tags)) tags=tags();\n                                    $(tags).each(function() { if (equal(this.id, obj.id)) { obj = this; return false; } });\n                                    data.push(obj);\n                                });\n\n                                callback(data);\n                            };\n                        }\n                    }\n                }\n            }\n            if (typeof(opts.query) !== \"function\") {\n                throw \"query function not defined for Select2 \" + opts.element.attr(\"id\");\n            }\n\n            if (opts.createSearchChoicePosition === 'top') {\n                opts.createSearchChoicePosition = function(list, item) { list.unshift(item); };\n            }\n            else if (opts.createSearchChoicePosition === 'bottom') {\n                opts.createSearchChoicePosition = function(list, item) { list.push(item); };\n            }\n            else if (typeof(opts.createSearchChoicePosition) !== \"function\")  {\n                throw \"invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function\";\n            }\n\n            return opts;\n        },\n\n        /**\n         * Monitor the original element for changes and update select2 accordingly\n         */\n        // abstract\n        monitorSource: function () {\n            var el = this.opts.element, observer, self = this;\n\n            el.on(\"change.select2\", this.bind(function (e) {\n                if (this.opts.element.data(\"select2-change-triggered\") !== true) {\n                    this.initSelection();\n                }\n            }));\n\n            this._sync = this.bind(function () {\n\n                // sync enabled state\n                var disabled = el.prop(\"disabled\");\n                if (disabled === undefined) disabled = false;\n                this.enable(!disabled);\n\n                var readonly = el.prop(\"readonly\");\n                if (readonly === undefined) readonly = false;\n                this.readonly(readonly);\n\n                syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);\n                this.container.addClass(evaluate(this.opts.containerCssClass, this.opts.element));\n\n                syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);\n                this.dropdown.addClass(evaluate(this.opts.dropdownCssClass, this.opts.element));\n\n            });\n\n            // IE8-10 (IE9/10 won't fire propertyChange via attachEventListener)\n            if (el.length && el[0].attachEvent) {\n                el.each(function() {\n                    this.attachEvent(\"onpropertychange\", self._sync);\n                });\n            }\n\n            // safari, chrome, firefox, IE11\n            observer = window.MutationObserver || window.WebKitMutationObserver|| window.MozMutationObserver;\n            if (observer !== undefined) {\n                if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }\n                this.propertyObserver = new observer(function (mutations) {\n                    $.each(mutations, self._sync);\n                });\n                this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });\n            }\n        },\n\n        // abstract\n        triggerSelect: function(data) {\n            var evt = $.Event(\"select2-selecting\", { val: this.id(data), object: data, choice: data });\n            this.opts.element.trigger(evt);\n            return !evt.isDefaultPrevented();\n        },\n\n        /**\n         * Triggers the change event on the source element\n         */\n        // abstract\n        triggerChange: function (details) {\n\n            details = details || {};\n            details= $.extend({}, details, { type: \"change\", val: this.val() });\n            // prevents recursive triggering\n            this.opts.element.data(\"select2-change-triggered\", true);\n            this.opts.element.trigger(details);\n            this.opts.element.data(\"select2-change-triggered\", false);\n\n            // some validation frameworks ignore the change event and listen instead to keyup, click for selects\n            // so here we trigger the click event manually\n            this.opts.element.click();\n\n            // ValidationEngine ignores the change event and listens instead to blur\n            // so here we trigger the blur event manually if so desired\n            if (this.opts.blurOnChange)\n                this.opts.element.blur();\n        },\n\n        //abstract\n        isInterfaceEnabled: function()\n        {\n            return this.enabledInterface === true;\n        },\n\n        // abstract\n        enableInterface: function() {\n            var enabled = this._enabled && !this._readonly,\n                disabled = !enabled;\n\n            if (enabled === this.enabledInterface) return false;\n\n            this.container.toggleClass(\"select2-container-disabled\", disabled);\n            this.close();\n            this.enabledInterface = enabled;\n\n            return true;\n        },\n\n        // abstract\n        enable: function(enabled) {\n            if (enabled === undefined) enabled = true;\n            if (this._enabled === enabled) return;\n            this._enabled = enabled;\n\n            this.opts.element.prop(\"disabled\", !enabled);\n            this.enableInterface();\n        },\n\n        // abstract\n        disable: function() {\n            this.enable(false);\n        },\n\n        // abstract\n        readonly: function(enabled) {\n            if (enabled === undefined) enabled = false;\n            if (this._readonly === enabled) return;\n            this._readonly = enabled;\n\n            this.opts.element.prop(\"readonly\", enabled);\n            this.enableInterface();\n        },\n\n        // abstract\n        opened: function () {\n            return (this.container) ? this.container.hasClass(\"select2-dropdown-open\") : false;\n        },\n\n        // abstract\n        positionDropdown: function() {\n            var $dropdown = this.dropdown,\n                offset = this.container.offset(),\n                height = this.container.outerHeight(false),\n                width = this.container.outerWidth(false),\n                dropHeight = $dropdown.outerHeight(false),\n                $window = $(window),\n                windowWidth = $window.width(),\n                windowHeight = $window.height(),\n                viewPortRight = $window.scrollLeft() + windowWidth,\n                viewportBottom = $window.scrollTop() + windowHeight,\n                dropTop = offset.top + height,\n                dropLeft = offset.left,\n                enoughRoomBelow = dropTop + dropHeight <= viewportBottom,\n                enoughRoomAbove = (offset.top - dropHeight) >= $window.scrollTop(),\n                dropWidth = $dropdown.outerWidth(false),\n                enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight,\n                aboveNow = $dropdown.hasClass(\"select2-drop-above\"),\n                bodyOffset,\n                above,\n                changeDirection,\n                css,\n                resultsListNode;\n\n            // always prefer the current above/below alignment, unless there is not enough room\n            if (aboveNow) {\n                above = true;\n                if (!enoughRoomAbove && enoughRoomBelow) {\n                    changeDirection = true;\n                    above = false;\n                }\n            } else {\n                above = false;\n                if (!enoughRoomBelow && enoughRoomAbove) {\n                    changeDirection = true;\n                    above = true;\n                }\n            }\n\n            //if we are changing direction we need to get positions when dropdown is hidden;\n            if (changeDirection) {\n                $dropdown.hide();\n                offset = this.container.offset();\n                height = this.container.outerHeight(false);\n                width = this.container.outerWidth(false);\n                dropHeight = $dropdown.outerHeight(false);\n                viewPortRight = $window.scrollLeft() + windowWidth;\n                viewportBottom = $window.scrollTop() + windowHeight;\n                dropTop = offset.top + height;\n                dropLeft = offset.left;\n                dropWidth = $dropdown.outerWidth(false);\n                enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;\n                $dropdown.show();\n\n                // fix so the cursor does not move to the left within the search-textbox in IE\n                this.focusSearch();\n            }\n\n            if (this.opts.dropdownAutoWidth) {\n                resultsListNode = $('.select2-results', $dropdown)[0];\n                $dropdown.addClass('select2-drop-auto-width');\n                $dropdown.css('width', '');\n                // Add scrollbar width to dropdown if vertical scrollbar is present\n                dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width);\n                dropWidth > width ? width = dropWidth : dropWidth = width;\n                dropHeight = $dropdown.outerHeight(false);\n                enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;\n            }\n            else {\n                this.container.removeClass('select2-drop-auto-width');\n            }\n\n            //console.log(\"below/ droptop:\", dropTop, \"dropHeight\", dropHeight, \"sum\", (dropTop+dropHeight)+\" viewport bottom\", viewportBottom, \"enough?\", enoughRoomBelow);\n            //console.log(\"above/ offset.top\", offset.top, \"dropHeight\", dropHeight, \"top\", (offset.top-dropHeight), \"scrollTop\", this.body.scrollTop(), \"enough?\", enoughRoomAbove);\n\n            // fix positioning when body has an offset and is not position: static\n            if (this.body.css('position') !== 'static') {\n                bodyOffset = this.body.offset();\n                dropTop -= bodyOffset.top;\n                dropLeft -= bodyOffset.left;\n            }\n\n            if (!enoughRoomOnRight) {\n                dropLeft = offset.left + this.container.outerWidth(false) - dropWidth;\n            }\n\n            css =  {\n                left: dropLeft,\n                width: width\n            };\n\n            if (above) {\n                css.top = offset.top - dropHeight;\n                css.bottom = 'auto';\n                this.container.addClass(\"select2-drop-above\");\n                $dropdown.addClass(\"select2-drop-above\");\n            }\n            else {\n                css.top = dropTop;\n                css.bottom = 'auto';\n                this.container.removeClass(\"select2-drop-above\");\n                $dropdown.removeClass(\"select2-drop-above\");\n            }\n            css = $.extend(css, evaluate(this.opts.dropdownCss, this.opts.element));\n\n            $dropdown.css(css);\n        },\n\n        // abstract\n        shouldOpen: function() {\n            var event;\n\n            if (this.opened()) return false;\n\n            if (this._enabled === false || this._readonly === true) return false;\n\n            event = $.Event(\"select2-opening\");\n            this.opts.element.trigger(event);\n            return !event.isDefaultPrevented();\n        },\n\n        // abstract\n        clearDropdownAlignmentPreference: function() {\n            // clear the classes used to figure out the preference of where the dropdown should be opened\n            this.container.removeClass(\"select2-drop-above\");\n            this.dropdown.removeClass(\"select2-drop-above\");\n        },\n\n        /**\n         * Opens the dropdown\n         *\n         * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example,\n         * the dropdown is already open, or if the 'open' event listener on the element called preventDefault().\n         */\n        // abstract\n        open: function () {\n\n            if (!this.shouldOpen()) return false;\n\n            this.opening();\n\n            // Only bind the document mousemove when the dropdown is visible\n            $document.on(\"mousemove.select2Event\", function (e) {\n                lastMousePosition.x = e.pageX;\n                lastMousePosition.y = e.pageY;\n            });\n\n            return true;\n        },\n\n        /**\n         * Performs the opening of the dropdown\n         */\n        // abstract\n        opening: function() {\n            var cid = this.containerEventName,\n                scroll = \"scroll.\" + cid,\n                resize = \"resize.\"+cid,\n                orient = \"orientationchange.\"+cid,\n                mask;\n\n            this.container.addClass(\"select2-dropdown-open\").addClass(\"select2-container-active\");\n\n            this.clearDropdownAlignmentPreference();\n\n            if(this.dropdown[0] !== this.body.children().last()[0]) {\n                this.dropdown.detach().appendTo(this.body);\n            }\n\n            // create the dropdown mask if doesn't already exist\n            mask = $(\"#select2-drop-mask\");\n            if (mask.length == 0) {\n                mask = $(document.createElement(\"div\"));\n                mask.attr(\"id\",\"select2-drop-mask\").attr(\"class\",\"select2-drop-mask\");\n                mask.hide();\n                mask.appendTo(this.body);\n                mask.on(\"mousedown touchstart click\", function (e) {\n                    // Prevent IE from generating a click event on the body\n                    reinsertElement(mask);\n\n                    var dropdown = $(\"#select2-drop\"), self;\n                    if (dropdown.length > 0) {\n                        self=dropdown.data(\"select2\");\n                        if (self.opts.selectOnBlur) {\n                            self.selectHighlighted({noFocus: true});\n                        }\n                        self.close();\n                        e.preventDefault();\n                        e.stopPropagation();\n                    }\n                });\n            }\n\n            // ensure the mask is always right before the dropdown\n            if (this.dropdown.prev()[0] !== mask[0]) {\n                this.dropdown.before(mask);\n            }\n\n            // move the global id to the correct dropdown\n            $(\"#select2-drop\").removeAttr(\"id\");\n            this.dropdown.attr(\"id\", \"select2-drop\");\n\n            // show the elements\n            mask.show();\n\n            this.positionDropdown();\n            this.dropdown.show();\n            this.positionDropdown();\n\n            this.dropdown.addClass(\"select2-drop-active\");\n\n            // attach listeners to events that can change the position of the container and thus require\n            // the position of the dropdown to be updated as well so it does not come unglued from the container\n            var that = this;\n            this.container.parents().add(window).each(function () {\n                $(this).on(resize+\" \"+scroll+\" \"+orient, function (e) {\n                    if (that.opened()) that.positionDropdown();\n                });\n            });\n\n\n        },\n\n        // abstract\n        close: function () {\n            if (!this.opened()) return;\n\n            var cid = this.containerEventName,\n                scroll = \"scroll.\" + cid,\n                resize = \"resize.\"+cid,\n                orient = \"orientationchange.\"+cid;\n\n            // unbind event listeners\n            this.container.parents().add(window).each(function () { $(this).off(scroll).off(resize).off(orient); });\n\n            this.clearDropdownAlignmentPreference();\n\n            $(\"#select2-drop-mask\").hide();\n            this.dropdown.removeAttr(\"id\"); // only the active dropdown has the select2-drop id\n            this.dropdown.hide();\n            this.container.removeClass(\"select2-dropdown-open\").removeClass(\"select2-container-active\");\n            this.results.empty();\n\n            // Now that the dropdown is closed, unbind the global document mousemove event\n            $document.off(\"mousemove.select2Event\");\n\n            this.clearSearch();\n            this.search.removeClass(\"select2-active\");\n            this.opts.element.trigger($.Event(\"select2-close\"));\n        },\n\n        /**\n         * Opens control, sets input value, and updates results.\n         */\n        // abstract\n        externalSearch: function (term) {\n            this.open();\n            this.search.val(term);\n            this.updateResults(false);\n        },\n\n        // abstract\n        clearSearch: function () {\n\n        },\n\n        //abstract\n        getMaximumSelectionSize: function() {\n            return evaluate(this.opts.maximumSelectionSize, this.opts.element);\n        },\n\n        // abstract\n        ensureHighlightVisible: function () {\n            var results = this.results, children, index, child, hb, rb, y, more, topOffset;\n\n            index = this.highlight();\n\n            if (index < 0) return;\n\n            if (index == 0) {\n\n                // if the first element is highlighted scroll all the way to the top,\n                // that way any unselectable headers above it will also be scrolled\n                // into view\n\n                results.scrollTop(0);\n                return;\n            }\n\n            children = this.findHighlightableChoices().find('.select2-result-label');\n\n            child = $(children[index]);\n\n            topOffset = (child.offset() || {}).top || 0;\n\n            hb = topOffset + child.outerHeight(true);\n\n            // if this is the last child lets also make sure select2-more-results is visible\n            if (index === children.length - 1) {\n                more = results.find(\"li.select2-more-results\");\n                if (more.length > 0) {\n                    hb = more.offset().top + more.outerHeight(true);\n                }\n            }\n\n            rb = results.offset().top + results.outerHeight(true);\n            if (hb > rb) {\n                results.scrollTop(results.scrollTop() + (hb - rb));\n            }\n            y = topOffset - results.offset().top;\n\n            // make sure the top of the element is visible\n            if (y < 0 && child.css('display') != 'none' ) {\n                results.scrollTop(results.scrollTop() + y); // y is negative\n            }\n        },\n\n        // abstract\n        findHighlightableChoices: function() {\n            return this.results.find(\".select2-result-selectable:not(.select2-disabled):not(.select2-selected)\");\n        },\n\n        // abstract\n        moveHighlight: function (delta) {\n            var choices = this.findHighlightableChoices(),\n                index = this.highlight();\n\n            while (index > -1 && index < choices.length) {\n                index += delta;\n                var choice = $(choices[index]);\n                if (choice.hasClass(\"select2-result-selectable\") && !choice.hasClass(\"select2-disabled\") && !choice.hasClass(\"select2-selected\")) {\n                    this.highlight(index);\n                    break;\n                }\n            }\n        },\n\n        // abstract\n        highlight: function (index) {\n            var choices = this.findHighlightableChoices(),\n                choice,\n                data;\n\n            if (arguments.length === 0) {\n                return indexOf(choices.filter(\".select2-highlighted\")[0], choices.get());\n            }\n\n            if (index >= choices.length) index = choices.length - 1;\n            if (index < 0) index = 0;\n\n            this.removeHighlight();\n\n            choice = $(choices[index]);\n            choice.addClass(\"select2-highlighted\");\n\n            // ensure assistive technology can determine the active choice\n            this.search.attr(\"aria-activedescendant\", choice.find(\".select2-result-label\").attr(\"id\"));\n\n            this.ensureHighlightVisible();\n\n            this.liveRegion.text(choice.text());\n\n            data = choice.data(\"select2-data\");\n            if (data) {\n                this.opts.element.trigger({ type: \"select2-highlight\", val: this.id(data), choice: data });\n            }\n        },\n\n        removeHighlight: function() {\n            this.results.find(\".select2-highlighted\").removeClass(\"select2-highlighted\");\n        },\n\n        touchMoved: function() {\n            this._touchMoved = true;\n        },\n\n        clearTouchMoved: function() {\n          this._touchMoved = false;\n        },\n\n        // abstract\n        countSelectableResults: function() {\n            return this.findHighlightableChoices().length;\n        },\n\n        // abstract\n        highlightUnderEvent: function (event) {\n            var el = $(event.target).closest(\".select2-result-selectable\");\n            if (el.length > 0 && !el.is(\".select2-highlighted\")) {\n                var choices = this.findHighlightableChoices();\n                this.highlight(choices.index(el));\n            } else if (el.length == 0) {\n                // if we are over an unselectable item remove all highlights\n                this.removeHighlight();\n            }\n        },\n\n        // abstract\n        loadMoreIfNeeded: function () {\n            var results = this.results,\n                more = results.find(\"li.select2-more-results\"),\n                below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible\n                page = this.resultsPage + 1,\n                self=this,\n                term=this.search.val(),\n                context=this.context;\n\n            if (more.length === 0) return;\n            below = more.offset().top - results.offset().top - results.height();\n\n            if (below <= this.opts.loadMorePadding) {\n                more.addClass(\"select2-active\");\n                this.opts.query({\n                        element: this.opts.element,\n                        term: term,\n                        page: page,\n                        context: context,\n                        matcher: this.opts.matcher,\n                        callback: this.bind(function (data) {\n\n                    // ignore a response if the select2 has been closed before it was received\n                    if (!self.opened()) return;\n\n\n                    self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context});\n                    self.postprocessResults(data, false, false);\n\n                    if (data.more===true) {\n                        more.detach().appendTo(results).text(evaluate(self.opts.formatLoadMore, self.opts.element, page+1));\n                        window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);\n                    } else {\n                        more.remove();\n                    }\n                    self.positionDropdown();\n                    self.resultsPage = page;\n                    self.context = data.context;\n                    this.opts.element.trigger({ type: \"select2-loaded\", items: data });\n                })});\n            }\n        },\n\n        /**\n         * Default tokenizer function which does nothing\n         */\n        tokenize: function() {\n\n        },\n\n        /**\n         * @param initial whether or not this is the call to this method right after the dropdown has been opened\n         */\n        // abstract\n        updateResults: function (initial) {\n            var search = this.search,\n                results = this.results,\n                opts = this.opts,\n                data,\n                self = this,\n                input,\n                term = search.val(),\n                lastTerm = $.data(this.container, \"select2-last-term\"),\n                // sequence number used to drop out-of-order responses\n                queryNumber;\n\n            // prevent duplicate queries against the same term\n            if (initial !== true && lastTerm && equal(term, lastTerm)) return;\n\n            $.data(this.container, \"select2-last-term\", term);\n\n            // if the search is currently hidden we do not alter the results\n            if (initial !== true && (this.showSearchInput === false || !this.opened())) {\n                return;\n            }\n\n            function postRender() {\n                search.removeClass(\"select2-active\");\n                self.positionDropdown();\n                if (results.find('.select2-no-results,.select2-selection-limit,.select2-searching').length) {\n                    self.liveRegion.text(results.text());\n                }\n                else {\n                    self.liveRegion.text(self.opts.formatMatches(results.find('.select2-result-selectable').length));\n                }\n            }\n\n            function render(html) {\n                results.html(html);\n                postRender();\n            }\n\n            queryNumber = ++this.queryCount;\n\n            var maxSelSize = this.getMaximumSelectionSize();\n            if (maxSelSize >=1) {\n                data = this.data();\n                if ($.isArray(data) && data.length >= maxSelSize && checkFormatter(opts.formatSelectionTooBig, \"formatSelectionTooBig\")) {\n                    render(\"<li class='select2-selection-limit'>\" + evaluate(opts.formatSelectionTooBig, opts.element, maxSelSize) + \"</li>\");\n                    return;\n                }\n            }\n\n            if (search.val().length < opts.minimumInputLength) {\n                if (checkFormatter(opts.formatInputTooShort, \"formatInputTooShort\")) {\n                    render(\"<li class='select2-no-results'>\" + evaluate(opts.formatInputTooShort, opts.element, search.val(), opts.minimumInputLength) + \"</li>\");\n                } else {\n                    render(\"\");\n                }\n                if (initial && this.showSearch) this.showSearch(true);\n                return;\n            }\n\n            if (opts.maximumInputLength && search.val().length > opts.maximumInputLength) {\n                if (checkFormatter(opts.formatInputTooLong, \"formatInputTooLong\")) {\n                    render(\"<li class='select2-no-results'>\" + evaluate(opts.formatInputTooLong, opts.element, search.val(), opts.maximumInputLength) + \"</li>\");\n                } else {\n                    render(\"\");\n                }\n                return;\n            }\n\n            if (opts.formatSearching && this.findHighlightableChoices().length === 0) {\n                render(\"<li class='select2-searching'>\" + evaluate(opts.formatSearching, opts.element) + \"</li>\");\n            }\n\n            search.addClass(\"select2-active\");\n\n            this.removeHighlight();\n\n            // give the tokenizer a chance to pre-process the input\n            input = this.tokenize();\n            if (input != undefined && input != null) {\n                search.val(input);\n            }\n\n            this.resultsPage = 1;\n\n            opts.query({\n                element: opts.element,\n                    term: search.val(),\n                    page: this.resultsPage,\n                    context: null,\n                    matcher: opts.matcher,\n                    callback: this.bind(function (data) {\n                var def; // default choice\n\n                // ignore old responses\n                if (queryNumber != this.queryCount) {\n                  return;\n                }\n\n                // ignore a response if the select2 has been closed before it was received\n                if (!this.opened()) {\n                    this.search.removeClass(\"select2-active\");\n                    return;\n                }\n\n                // handle ajax error\n                if(data.hasError !== undefined && checkFormatter(opts.formatAjaxError, \"formatAjaxError\")) {\n                    render(\"<li class='select2-ajax-error'>\" + evaluate(opts.formatAjaxError, opts.element, data.jqXHR, data.textStatus, data.errorThrown) + \"</li>\");\n                    return;\n                }\n\n                // save context, if any\n                this.context = (data.context===undefined) ? null : data.context;\n                // create a default choice and prepend it to the list\n                if (this.opts.createSearchChoice && search.val() !== \"\") {\n                    def = this.opts.createSearchChoice.call(self, search.val(), data.results);\n                    if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) {\n                        if ($(data.results).filter(\n                            function () {\n                                return equal(self.id(this), self.id(def));\n                            }).length === 0) {\n                            this.opts.createSearchChoicePosition(data.results, def);\n                        }\n                    }\n                }\n\n                if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, \"formatNoMatches\")) {\n                    render(\"<li class='select2-no-results'>\" + evaluate(opts.formatNoMatches, opts.element, search.val()) + \"</li>\");\n                    return;\n                }\n\n                results.empty();\n                self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null});\n\n                if (data.more === true && checkFormatter(opts.formatLoadMore, \"formatLoadMore\")) {\n                    results.append(\"<li class='select2-more-results'>\" + opts.escapeMarkup(evaluate(opts.formatLoadMore, opts.element, this.resultsPage)) + \"</li>\");\n                    window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);\n                }\n\n                this.postprocessResults(data, initial);\n\n                postRender();\n\n                this.opts.element.trigger({ type: \"select2-loaded\", items: data });\n            })});\n        },\n\n        // abstract\n        cancel: function () {\n            this.close();\n        },\n\n        // abstract\n        blur: function () {\n            // if selectOnBlur == true, select the currently highlighted option\n            if (this.opts.selectOnBlur)\n                this.selectHighlighted({noFocus: true});\n\n            this.close();\n            this.container.removeClass(\"select2-container-active\");\n            // synonymous to .is(':focus'), which is available in jquery >= 1.6\n            if (this.search[0] === document.activeElement) { this.search.blur(); }\n            this.clearSearch();\n            this.selection.find(\".select2-search-choice-focus\").removeClass(\"select2-search-choice-focus\");\n        },\n\n        // abstract\n        focusSearch: function () {\n            focus(this.search);\n        },\n\n        // abstract\n        selectHighlighted: function (options) {\n            if (this._touchMoved) {\n              this.clearTouchMoved();\n              return;\n            }\n            var index=this.highlight(),\n                highlighted=this.results.find(\".select2-highlighted\"),\n                data = highlighted.closest('.select2-result').data(\"select2-data\");\n\n            if (data) {\n                this.highlight(index);\n                this.onSelect(data, options);\n            } else if (options && options.noFocus) {\n                this.close();\n            }\n        },\n\n        // abstract\n        getPlaceholder: function () {\n            var placeholderOption;\n            return this.opts.element.attr(\"placeholder\") ||\n                this.opts.element.attr(\"data-placeholder\") || // jquery 1.4 compat\n                this.opts.element.data(\"placeholder\") ||\n                this.opts.placeholder ||\n                ((placeholderOption = this.getPlaceholderOption()) !== undefined ? placeholderOption.text() : undefined);\n        },\n\n        // abstract\n        getPlaceholderOption: function() {\n            if (this.select) {\n                var firstOption = this.select.children('option').first();\n                if (this.opts.placeholderOption !== undefined ) {\n                    //Determine the placeholder option based on the specified placeholderOption setting\n                    return (this.opts.placeholderOption === \"first\" && firstOption) ||\n                           (typeof this.opts.placeholderOption === \"function\" && this.opts.placeholderOption(this.select));\n                } else if ($.trim(firstOption.text()) === \"\" && firstOption.val() === \"\") {\n                    //No explicit placeholder option specified, use the first if it's blank\n                    return firstOption;\n                }\n            }\n        },\n\n        /**\n         * Get the desired width for the container element.  This is\n         * derived first from option `width` passed to select2, then\n         * the inline 'style' on the original element, and finally\n         * falls back to the jQuery calculated element width.\n         */\n        // abstract\n        initContainerWidth: function () {\n            function resolveContainerWidth() {\n                var style, attrs, matches, i, l, attr;\n\n                if (this.opts.width === \"off\") {\n                    return null;\n                } else if (this.opts.width === \"element\"){\n                    return this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px';\n                } else if (this.opts.width === \"copy\" || this.opts.width === \"resolve\") {\n                    // check if there is inline style on the element that contains width\n                    style = this.opts.element.attr('style');\n                    if (style !== undefined) {\n                        attrs = style.split(';');\n                        for (i = 0, l = attrs.length; i < l; i = i + 1) {\n                            attr = attrs[i].replace(/\\s/g, '');\n                            matches = attr.match(/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);\n                            if (matches !== null && matches.length >= 1)\n                                return matches[1];\n                        }\n                    }\n\n                    if (this.opts.width === \"resolve\") {\n                        // next check if css('width') can resolve a width that is percent based, this is sometimes possible\n                        // when attached to input type=hidden or elements hidden via css\n                        style = this.opts.element.css('width');\n                        if (style.indexOf(\"%\") > 0) return style;\n\n                        // finally, fallback on the calculated width of the element\n                        return (this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px');\n                    }\n\n                    return null;\n                } else if ($.isFunction(this.opts.width)) {\n                    return this.opts.width();\n                } else {\n                    return this.opts.width;\n               }\n            };\n\n            var width = resolveContainerWidth.call(this);\n            if (width !== null) {\n                this.container.css(\"width\", width);\n            }\n        }\n    });\n\n    SingleSelect2 = clazz(AbstractSelect2, {\n\n        // single\n\n        createContainer: function () {\n            var container = $(document.createElement(\"div\")).attr({\n                \"class\": \"select2-container\"\n            }).html([\n                \"<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>\",\n                \"   <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>\",\n                \"   <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>\",\n                \"</a>\",\n                \"<label for='' class='select2-offscreen'></label>\",\n                \"<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />\",\n                \"<div class='select2-drop select2-display-none'>\",\n                \"   <div class='select2-search'>\",\n                \"       <label for='' class='select2-offscreen'></label>\",\n                \"       <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'\",\n                \"       aria-autocomplete='list' />\",\n                \"   </div>\",\n                \"   <ul class='select2-results' role='listbox'>\",\n                \"   </ul>\",\n                \"</div>\"].join(\"\"));\n            return container;\n        },\n\n        // single\n        enableInterface: function() {\n            if (this.parent.enableInterface.apply(this, arguments)) {\n                this.focusser.prop(\"disabled\", !this.isInterfaceEnabled());\n            }\n        },\n\n        // single\n        opening: function () {\n            var el, range, len;\n\n            if (this.opts.minimumResultsForSearch >= 0) {\n                this.showSearch(true);\n            }\n\n            this.parent.opening.apply(this, arguments);\n\n            if (this.showSearchInput !== false) {\n                // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range\n                // all other browsers handle this just fine\n\n                this.search.val(this.focusser.val());\n            }\n            if (this.opts.shouldFocusInput(this)) {\n                this.search.focus();\n                // move the cursor to the end after focussing, otherwise it will be at the beginning and\n                // new text will appear *before* focusser.val()\n                el = this.search.get(0);\n                if (el.createTextRange) {\n                    range = el.createTextRange();\n                    range.collapse(false);\n                    range.select();\n                } else if (el.setSelectionRange) {\n                    len = this.search.val().length;\n                    el.setSelectionRange(len, len);\n                }\n            }\n\n            // initializes search's value with nextSearchTerm (if defined by user)\n            // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter\n            if(this.search.val() === \"\") {\n                if(this.nextSearchTerm != undefined){\n                    this.search.val(this.nextSearchTerm);\n                    this.search.select();\n                }\n            }\n\n            this.focusser.prop(\"disabled\", true).val(\"\");\n            this.updateResults(true);\n            this.opts.element.trigger($.Event(\"select2-open\"));\n        },\n\n        // single\n        close: function () {\n            if (!this.opened()) return;\n            this.parent.close.apply(this, arguments);\n\n            this.focusser.prop(\"disabled\", false);\n\n            if (this.opts.shouldFocusInput(this)) {\n                this.focusser.focus();\n            }\n        },\n\n        // single\n        focus: function () {\n            if (this.opened()) {\n                this.close();\n            } else {\n                this.focusser.prop(\"disabled\", false);\n                if (this.opts.shouldFocusInput(this)) {\n                    this.focusser.focus();\n                }\n            }\n        },\n\n        // single\n        isFocused: function () {\n            return this.container.hasClass(\"select2-container-active\");\n        },\n\n        // single\n        cancel: function () {\n            this.parent.cancel.apply(this, arguments);\n            this.focusser.prop(\"disabled\", false);\n\n            if (this.opts.shouldFocusInput(this)) {\n                this.focusser.focus();\n            }\n        },\n\n        // single\n        destroy: function() {\n            $(\"label[for='\" + this.focusser.attr('id') + \"']\")\n                .attr('for', this.opts.element.attr(\"id\"));\n            this.parent.destroy.apply(this, arguments);\n\n            cleanupJQueryElements.call(this,\n                \"selection\",\n                \"focusser\"\n            );\n        },\n\n        // single\n        initContainer: function () {\n\n            var selection,\n                container = this.container,\n                dropdown = this.dropdown,\n                idSuffix = nextUid(),\n                elementLabel;\n\n            if (this.opts.minimumResultsForSearch < 0) {\n                this.showSearch(false);\n            } else {\n                this.showSearch(true);\n            }\n\n            this.selection = selection = container.find(\".select2-choice\");\n\n            this.focusser = container.find(\".select2-focusser\");\n\n            // add aria associations\n            selection.find(\".select2-chosen\").attr(\"id\", \"select2-chosen-\"+idSuffix);\n            this.focusser.attr(\"aria-labelledby\", \"select2-chosen-\"+idSuffix);\n            this.results.attr(\"id\", \"select2-results-\"+idSuffix);\n            this.search.attr(\"aria-owns\", \"select2-results-\"+idSuffix);\n\n            // rewrite labels from original element to focusser\n            this.focusser.attr(\"id\", \"s2id_autogen\"+idSuffix);\n\n            elementLabel = $(\"label[for='\" + this.opts.element.attr(\"id\") + \"']\");\n\n            this.focusser.prev()\n                .text(elementLabel.text())\n                .attr('for', this.focusser.attr('id'));\n\n            // Ensure the original element retains an accessible name\n            var originalTitle = this.opts.element.attr(\"title\");\n            this.opts.element.attr(\"title\", (originalTitle || elementLabel.text()));\n\n            this.focusser.attr(\"tabindex\", this.elementTabIndex);\n\n            // write label for search field using the label from the focusser element\n            this.search.attr(\"id\", this.focusser.attr('id') + '_search');\n\n            this.search.prev()\n                .text($(\"label[for='\" + this.focusser.attr('id') + \"']\").text())\n                .attr('for', this.search.attr('id'));\n\n            this.search.on(\"keydown\", this.bind(function (e) {\n                if (!this.isInterfaceEnabled()) return;\n\n                // filter 229 keyCodes (input method editor is processing key input)\n                if (229 == e.keyCode) return;\n\n                if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {\n                    // prevent the page from scrolling\n                    killEvent(e);\n                    return;\n                }\n\n                switch (e.which) {\n                    case KEY.UP:\n                    case KEY.DOWN:\n                        this.moveHighlight((e.which === KEY.UP) ? -1 : 1);\n                        killEvent(e);\n                        return;\n                    case KEY.ENTER:\n                        this.selectHighlighted();\n                        killEvent(e);\n                        return;\n                    case KEY.TAB:\n                        this.selectHighlighted({noFocus: true});\n                        return;\n                    case KEY.ESC:\n                        this.cancel(e);\n                        killEvent(e);\n                        return;\n                }\n            }));\n\n            this.search.on(\"blur\", this.bind(function(e) {\n                // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown.\n                // without this the search field loses focus which is annoying\n                if (document.activeElement === this.body.get(0)) {\n                    window.setTimeout(this.bind(function() {\n                        if (this.opened()) {\n                            this.search.focus();\n                        }\n                    }), 0);\n                }\n            }));\n\n            this.focusser.on(\"keydown\", this.bind(function (e) {\n                if (!this.isInterfaceEnabled()) return;\n\n                if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {\n                    return;\n                }\n\n                if (this.opts.openOnEnter === false && e.which === KEY.ENTER) {\n                    killEvent(e);\n                    return;\n                }\n\n                if (e.which == KEY.DOWN || e.which == KEY.UP\n                    || (e.which == KEY.ENTER && this.opts.openOnEnter)) {\n\n                    if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return;\n\n                    this.open();\n                    killEvent(e);\n                    return;\n                }\n\n                if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) {\n                    if (this.opts.allowClear) {\n                        this.clear();\n                    }\n                    killEvent(e);\n                    return;\n                }\n            }));\n\n\n            installKeyUpChangeEvent(this.focusser);\n            this.focusser.on(\"keyup-change input\", this.bind(function(e) {\n                if (this.opts.minimumResultsForSearch >= 0) {\n                    e.stopPropagation();\n                    if (this.opened()) return;\n                    this.open();\n                }\n            }));\n\n            selection.on(\"mousedown touchstart\", \"abbr\", this.bind(function (e) {\n                if (!this.isInterfaceEnabled()) return;\n                this.clear();\n                killEventImmediately(e);\n                this.close();\n                this.selection.focus();\n            }));\n\n            selection.on(\"mousedown touchstart\", this.bind(function (e) {\n                // Prevent IE from generating a click event on the body\n                reinsertElement(selection);\n\n                if (!this.container.hasClass(\"select2-container-active\")) {\n                    this.opts.element.trigger($.Event(\"select2-focus\"));\n                }\n\n                if (this.opened()) {\n                    this.close();\n                } else if (this.isInterfaceEnabled()) {\n                    this.open();\n                }\n\n                killEvent(e);\n            }));\n\n            dropdown.on(\"mousedown touchstart\", this.bind(function() {\n                if (this.opts.shouldFocusInput(this)) {\n                    this.search.focus();\n                }\n            }));\n\n            selection.on(\"focus\", this.bind(function(e) {\n                killEvent(e);\n            }));\n\n            this.focusser.on(\"focus\", this.bind(function(){\n                if (!this.container.hasClass(\"select2-container-active\")) {\n                    this.opts.element.trigger($.Event(\"select2-focus\"));\n                }\n                this.container.addClass(\"select2-container-active\");\n            })).on(\"blur\", this.bind(function() {\n                if (!this.opened()) {\n                    this.container.removeClass(\"select2-container-active\");\n                    this.opts.element.trigger($.Event(\"select2-blur\"));\n                }\n            }));\n            this.search.on(\"focus\", this.bind(function(){\n                if (!this.container.hasClass(\"select2-container-active\")) {\n                    this.opts.element.trigger($.Event(\"select2-focus\"));\n                }\n                this.container.addClass(\"select2-container-active\");\n            }));\n\n            this.initContainerWidth();\n            this.opts.element.addClass(\"select2-offscreen\");\n            this.setPlaceholder();\n\n        },\n\n        // single\n        clear: function(triggerChange) {\n            var data=this.selection.data(\"select2-data\");\n            if (data) { // guard against queued quick consecutive clicks\n                var evt = $.Event(\"select2-clearing\");\n                this.opts.element.trigger(evt);\n                if (evt.isDefaultPrevented()) {\n                    return;\n                }\n                var placeholderOption = this.getPlaceholderOption();\n                this.opts.element.val(placeholderOption ? placeholderOption.val() : \"\");\n                this.selection.find(\".select2-chosen\").empty();\n                this.selection.removeData(\"select2-data\");\n                this.setPlaceholder();\n\n                if (triggerChange !== false){\n                    this.opts.element.trigger({ type: \"select2-removed\", val: this.id(data), choice: data });\n                    this.triggerChange({removed:data});\n                }\n            }\n        },\n\n        /**\n         * Sets selection based on source element's value\n         */\n        // single\n        initSelection: function () {\n            var selected;\n            if (this.isPlaceholderOptionSelected()) {\n                this.updateSelection(null);\n                this.close();\n                this.setPlaceholder();\n            } else {\n                var self = this;\n                this.opts.initSelection.call(null, this.opts.element, function(selected){\n                    if (selected !== undefined && selected !== null) {\n                        self.updateSelection(selected);\n                        self.close();\n                        self.setPlaceholder();\n                        self.nextSearchTerm = self.opts.nextSearchTerm(selected, self.search.val());\n                    }\n                });\n            }\n        },\n\n        isPlaceholderOptionSelected: function() {\n            var placeholderOption;\n            if (this.getPlaceholder() === undefined) return false; // no placeholder specified so no option should be considered\n            return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop(\"selected\"))\n                || (this.opts.element.val() === \"\")\n                || (this.opts.element.val() === undefined)\n                || (this.opts.element.val() === null);\n        },\n\n        // single\n        prepareOpts: function () {\n            var opts = this.parent.prepareOpts.apply(this, arguments),\n                self=this;\n\n            if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n                // install the selection initializer\n                opts.initSelection = function (element, callback) {\n                    var selected = element.find(\"option\").filter(function() { return this.selected && !this.disabled });\n                    // a single select box always has a value, no need to null check 'selected'\n                    callback(self.optionToData(selected));\n                };\n            } else if (\"data\" in opts) {\n                // install default initSelection when applied to hidden input and data is local\n                opts.initSelection = opts.initSelection || function (element, callback) {\n                    var id = element.val();\n                    //search in data by id, storing the actual matching item\n                    var match = null;\n                    opts.query({\n                        matcher: function(term, text, el){\n                            var is_match = equal(id, opts.id(el));\n                            if (is_match) {\n                                match = el;\n                            }\n                            return is_match;\n                        },\n                        callback: !$.isFunction(callback) ? $.noop : function() {\n                            callback(match);\n                        }\n                    });\n                };\n            }\n\n            return opts;\n        },\n\n        // single\n        getPlaceholder: function() {\n            // if a placeholder is specified on a single select without a valid placeholder option ignore it\n            if (this.select) {\n                if (this.getPlaceholderOption() === undefined) {\n                    return undefined;\n                }\n            }\n\n            return this.parent.getPlaceholder.apply(this, arguments);\n        },\n\n        // single\n        setPlaceholder: function () {\n            var placeholder = this.getPlaceholder();\n\n            if (this.isPlaceholderOptionSelected() && placeholder !== undefined) {\n\n                // check for a placeholder option if attached to a select\n                if (this.select && this.getPlaceholderOption() === undefined) return;\n\n                this.selection.find(\".select2-chosen\").html(this.opts.escapeMarkup(placeholder));\n\n                this.selection.addClass(\"select2-default\");\n\n                this.container.removeClass(\"select2-allowclear\");\n            }\n        },\n\n        // single\n        postprocessResults: function (data, initial, noHighlightUpdate) {\n            var selected = 0, self = this, showSearchInput = true;\n\n            // find the selected element in the result list\n\n            this.findHighlightableChoices().each2(function (i, elm) {\n                if (equal(self.id(elm.data(\"select2-data\")), self.opts.element.val())) {\n                    selected = i;\n                    return false;\n                }\n            });\n\n            // and highlight it\n            if (noHighlightUpdate !== false) {\n                if (initial === true && selected >= 0) {\n                    this.highlight(selected);\n                } else {\n                    this.highlight(0);\n                }\n            }\n\n            // hide the search box if this is the first we got the results and there are enough of them for search\n\n            if (initial === true) {\n                var min = this.opts.minimumResultsForSearch;\n                if (min >= 0) {\n                    this.showSearch(countResults(data.results) >= min);\n                }\n            }\n        },\n\n        // single\n        showSearch: function(showSearchInput) {\n            if (this.showSearchInput === showSearchInput) return;\n\n            this.showSearchInput = showSearchInput;\n\n            this.dropdown.find(\".select2-search\").toggleClass(\"select2-search-hidden\", !showSearchInput);\n            this.dropdown.find(\".select2-search\").toggleClass(\"select2-offscreen\", !showSearchInput);\n            //add \"select2-with-searchbox\" to the container if search box is shown\n            $(this.dropdown, this.container).toggleClass(\"select2-with-searchbox\", showSearchInput);\n        },\n\n        // single\n        onSelect: function (data, options) {\n\n            if (!this.triggerSelect(data)) { return; }\n\n            var old = this.opts.element.val(),\n                oldData = this.data();\n\n            this.opts.element.val(this.id(data));\n            this.updateSelection(data);\n\n            this.opts.element.trigger({ type: \"select2-selected\", val: this.id(data), choice: data });\n\n            this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val());\n            this.close();\n\n            if ((!options || !options.noFocus) && this.opts.shouldFocusInput(this)) {\n                this.focusser.focus();\n            }\n\n            if (!equal(old, this.id(data))) {\n                this.triggerChange({ added: data, removed: oldData });\n            }\n        },\n\n        // single\n        updateSelection: function (data) {\n\n            var container=this.selection.find(\".select2-chosen\"), formatted, cssClass;\n\n            this.selection.data(\"select2-data\", data);\n\n            container.empty();\n            if (data !== null) {\n                formatted=this.opts.formatSelection(data, container, this.opts.escapeMarkup);\n            }\n            if (formatted !== undefined) {\n                container.append(formatted);\n            }\n            cssClass=this.opts.formatSelectionCssClass(data, container);\n            if (cssClass !== undefined) {\n                container.addClass(cssClass);\n            }\n\n            this.selection.removeClass(\"select2-default\");\n\n            if (this.opts.allowClear && this.getPlaceholder() !== undefined) {\n                this.container.addClass(\"select2-allowclear\");\n            }\n        },\n\n        // single\n        val: function () {\n            var val,\n                triggerChange = false,\n                data = null,\n                self = this,\n                oldData = this.data();\n\n            if (arguments.length === 0) {\n                return this.opts.element.val();\n            }\n\n            val = arguments[0];\n\n            if (arguments.length > 1) {\n                triggerChange = arguments[1];\n            }\n\n            if (this.select) {\n                this.select\n                    .val(val)\n                    .find(\"option\").filter(function() { return this.selected }).each2(function (i, elm) {\n                        data = self.optionToData(elm);\n                        return false;\n                    });\n                this.updateSelection(data);\n                this.setPlaceholder();\n                if (triggerChange) {\n                    this.triggerChange({added: data, removed:oldData});\n                }\n            } else {\n                // val is an id. !val is true for [undefined,null,'',0] - 0 is legal\n                if (!val && val !== 0) {\n                    this.clear(triggerChange);\n                    return;\n                }\n                if (this.opts.initSelection === undefined) {\n                    throw new Error(\"cannot call val() if initSelection() is not defined\");\n                }\n                this.opts.element.val(val);\n                this.opts.initSelection(this.opts.element, function(data){\n                    self.opts.element.val(!data ? \"\" : self.id(data));\n                    self.updateSelection(data);\n                    self.setPlaceholder();\n                    if (triggerChange) {\n                        self.triggerChange({added: data, removed:oldData});\n                    }\n                });\n            }\n        },\n\n        // single\n        clearSearch: function () {\n            this.search.val(\"\");\n            this.focusser.val(\"\");\n        },\n\n        // single\n        data: function(value) {\n            var data,\n                triggerChange = false;\n\n            if (arguments.length === 0) {\n                data = this.selection.data(\"select2-data\");\n                if (data == undefined) data = null;\n                return data;\n            } else {\n                if (arguments.length > 1) {\n                    triggerChange = arguments[1];\n                }\n                if (!value) {\n                    this.clear(triggerChange);\n                } else {\n                    data = this.data();\n                    this.opts.element.val(!value ? \"\" : this.id(value));\n                    this.updateSelection(value);\n                    if (triggerChange) {\n                        this.triggerChange({added: value, removed:data});\n                    }\n                }\n            }\n        }\n    });\n\n    MultiSelect2 = clazz(AbstractSelect2, {\n\n        // multi\n        createContainer: function () {\n            var container = $(document.createElement(\"div\")).attr({\n                \"class\": \"select2-container select2-container-multi\"\n            }).html([\n                \"<ul class='select2-choices'>\",\n                \"  <li class='select2-search-field'>\",\n                \"    <label for='' class='select2-offscreen'></label>\",\n                \"    <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>\",\n                \"  </li>\",\n                \"</ul>\",\n                \"<div class='select2-drop select2-drop-multi select2-display-none'>\",\n                \"   <ul class='select2-results'>\",\n                \"   </ul>\",\n                \"</div>\"].join(\"\"));\n            return container;\n        },\n\n        // multi\n        prepareOpts: function () {\n            var opts = this.parent.prepareOpts.apply(this, arguments),\n                self=this;\n\n            // TODO validate placeholder is a string if specified\n\n            if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n                // install the selection initializer\n                opts.initSelection = function (element, callback) {\n\n                    var data = [];\n\n                    element.find(\"option\").filter(function() { return this.selected && !this.disabled }).each2(function (i, elm) {\n                        data.push(self.optionToData(elm));\n                    });\n                    callback(data);\n                };\n            } else if (\"data\" in opts) {\n                // install default initSelection when applied to hidden input and data is local\n                opts.initSelection = opts.initSelection || function (element, callback) {\n                    var ids = splitVal(element.val(), opts.separator);\n                    //search in data by array of ids, storing matching items in a list\n                    var matches = [];\n                    opts.query({\n                        matcher: function(term, text, el){\n                            var is_match = $.grep(ids, function(id) {\n                                return equal(id, opts.id(el));\n                            }).length;\n                            if (is_match) {\n                                matches.push(el);\n                            }\n                            return is_match;\n                        },\n                        callback: !$.isFunction(callback) ? $.noop : function() {\n                            // reorder matches based on the order they appear in the ids array because right now\n                            // they are in the order in which they appear in data array\n                            var ordered = [];\n                            for (var i = 0; i < ids.length; i++) {\n                                var id = ids[i];\n                                for (var j = 0; j < matches.length; j++) {\n                                    var match = matches[j];\n                                    if (equal(id, opts.id(match))) {\n                                        ordered.push(match);\n                                        matches.splice(j, 1);\n                                        break;\n                                    }\n                                }\n                            }\n                            callback(ordered);\n                        }\n                    });\n                };\n            }\n\n            return opts;\n        },\n\n        // multi\n        selectChoice: function (choice) {\n\n            var selected = this.container.find(\".select2-search-choice-focus\");\n            if (selected.length && choice && choice[0] == selected[0]) {\n\n            } else {\n                if (selected.length) {\n                    this.opts.element.trigger(\"choice-deselected\", selected);\n                }\n                selected.removeClass(\"select2-search-choice-focus\");\n                if (choice && choice.length) {\n                    this.close();\n                    choice.addClass(\"select2-search-choice-focus\");\n                    this.opts.element.trigger(\"choice-selected\", choice);\n                }\n            }\n        },\n\n        // multi\n        destroy: function() {\n            $(\"label[for='\" + this.search.attr('id') + \"']\")\n                .attr('for', this.opts.element.attr(\"id\"));\n            this.parent.destroy.apply(this, arguments);\n\n            cleanupJQueryElements.call(this,\n                \"searchContainer\",\n                \"selection\"\n            );\n        },\n\n        // multi\n        initContainer: function () {\n\n            var selector = \".select2-choices\", selection;\n\n            this.searchContainer = this.container.find(\".select2-search-field\");\n            this.selection = selection = this.container.find(selector);\n\n            var _this = this;\n            this.selection.on(\"click\", \".select2-search-choice:not(.select2-locked)\", function (e) {\n                //killEvent(e);\n                _this.search[0].focus();\n                _this.selectChoice($(this));\n            });\n\n            // rewrite labels from original element to focusser\n            this.search.attr(\"id\", \"s2id_autogen\"+nextUid());\n\n            this.search.prev()\n                .text($(\"label[for='\" + this.opts.element.attr(\"id\") + \"']\").text())\n                .attr('for', this.search.attr('id'));\n\n            this.search.on(\"input paste\", this.bind(function() {\n                if (this.search.attr('placeholder') && this.search.val().length == 0) return;\n                if (!this.isInterfaceEnabled()) return;\n                if (!this.opened()) {\n                    this.open();\n                }\n            }));\n\n            this.search.attr(\"tabindex\", this.elementTabIndex);\n\n            this.keydowns = 0;\n            this.search.on(\"keydown\", this.bind(function (e) {\n                if (!this.isInterfaceEnabled()) return;\n\n                ++this.keydowns;\n                var selected = selection.find(\".select2-search-choice-focus\");\n                var prev = selected.prev(\".select2-search-choice:not(.select2-locked)\");\n                var next = selected.next(\".select2-search-choice:not(.select2-locked)\");\n                var pos = getCursorInfo(this.search);\n\n                if (selected.length &&\n                    (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) {\n                    var selectedChoice = selected;\n                    if (e.which == KEY.LEFT && prev.length) {\n                        selectedChoice = prev;\n                    }\n                    else if (e.which == KEY.RIGHT) {\n                        selectedChoice = next.length ? next : null;\n                    }\n                    else if (e.which === KEY.BACKSPACE) {\n                        if (this.unselect(selected.first())) {\n                            this.search.width(10);\n                            selectedChoice = prev.length ? prev : next;\n                        }\n                    } else if (e.which == KEY.DELETE) {\n                        if (this.unselect(selected.first())) {\n                            this.search.width(10);\n                            selectedChoice = next.length ? next : null;\n                        }\n                    } else if (e.which == KEY.ENTER) {\n                        selectedChoice = null;\n                    }\n\n                    this.selectChoice(selectedChoice);\n                    killEvent(e);\n                    if (!selectedChoice || !selectedChoice.length) {\n                        this.open();\n                    }\n                    return;\n                } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1)\n                    || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) {\n\n                    this.selectChoice(selection.find(\".select2-search-choice:not(.select2-locked)\").last());\n                    killEvent(e);\n                    return;\n                } else {\n                    this.selectChoice(null);\n                }\n\n                if (this.opened()) {\n                    switch (e.which) {\n                    case KEY.UP:\n                    case KEY.DOWN:\n                        this.moveHighlight((e.which === KEY.UP) ? -1 : 1);\n                        killEvent(e);\n                        return;\n                    case KEY.ENTER:\n                        this.selectHighlighted();\n                        killEvent(e);\n                        return;\n                    case KEY.TAB:\n                        this.selectHighlighted({noFocus:true});\n                        this.close();\n                        return;\n                    case KEY.ESC:\n                        this.cancel(e);\n                        killEvent(e);\n                        return;\n                    }\n                }\n\n                if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e)\n                 || e.which === KEY.BACKSPACE || e.which === KEY.ESC) {\n                    return;\n                }\n\n                if (e.which === KEY.ENTER) {\n                    if (this.opts.openOnEnter === false) {\n                        return;\n                    } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n                        return;\n                    }\n                }\n\n                this.open();\n\n                if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {\n                    // prevent the page from scrolling\n                    killEvent(e);\n                }\n\n                if (e.which === KEY.ENTER) {\n                    // prevent form from being submitted\n                    killEvent(e);\n                }\n\n            }));\n\n            this.search.on(\"keyup\", this.bind(function (e) {\n                this.keydowns = 0;\n                this.resizeSearch();\n            })\n            );\n\n            this.search.on(\"blur\", this.bind(function(e) {\n                this.container.removeClass(\"select2-container-active\");\n                this.search.removeClass(\"select2-focused\");\n                this.selectChoice(null);\n                if (!this.opened()) this.clearSearch();\n                e.stopImmediatePropagation();\n                this.opts.element.trigger($.Event(\"select2-blur\"));\n            }));\n\n            this.container.on(\"click\", selector, this.bind(function (e) {\n                if (!this.isInterfaceEnabled()) return;\n                if ($(e.target).closest(\".select2-search-choice\").length > 0) {\n                    // clicked inside a select2 search choice, do not open\n                    return;\n                }\n                this.selectChoice(null);\n                this.clearPlaceholder();\n                if (!this.container.hasClass(\"select2-container-active\")) {\n                    this.opts.element.trigger($.Event(\"select2-focus\"));\n                }\n                this.open();\n                this.focusSearch();\n                e.preventDefault();\n            }));\n\n            this.container.on(\"focus\", selector, this.bind(function () {\n                if (!this.isInterfaceEnabled()) return;\n                if (!this.container.hasClass(\"select2-container-active\")) {\n                    this.opts.element.trigger($.Event(\"select2-focus\"));\n                }\n                this.container.addClass(\"select2-container-active\");\n                this.dropdown.addClass(\"select2-drop-active\");\n                this.clearPlaceholder();\n            }));\n\n            this.initContainerWidth();\n            this.opts.element.addClass(\"select2-offscreen\");\n\n            // set the placeholder if necessary\n            this.clearSearch();\n        },\n\n        // multi\n        enableInterface: function() {\n            if (this.parent.enableInterface.apply(this, arguments)) {\n                this.search.prop(\"disabled\", !this.isInterfaceEnabled());\n            }\n        },\n\n        // multi\n        initSelection: function () {\n            var data;\n            if (this.opts.element.val() === \"\" && this.opts.element.text() === \"\") {\n                this.updateSelection([]);\n                this.close();\n                // set the placeholder if necessary\n                this.clearSearch();\n            }\n            if (this.select || this.opts.element.val() !== \"\") {\n                var self = this;\n                this.opts.initSelection.call(null, this.opts.element, function(data){\n                    if (data !== undefined && data !== null) {\n                        self.updateSelection(data);\n                        self.close();\n                        // set the placeholder if necessary\n                        self.clearSearch();\n                    }\n                });\n            }\n        },\n\n        // multi\n        clearSearch: function () {\n            var placeholder = this.getPlaceholder(),\n                maxWidth = this.getMaxSearchWidth();\n\n            if (placeholder !== undefined  && this.getVal().length === 0 && this.search.hasClass(\"select2-focused\") === false) {\n                this.search.val(placeholder).addClass(\"select2-default\");\n                // stretch the search box to full width of the container so as much of the placeholder is visible as possible\n                // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944\n                this.search.width(maxWidth > 0 ? maxWidth : this.container.css(\"width\"));\n            } else {\n                this.search.val(\"\").width(10);\n            }\n        },\n\n        // multi\n        clearPlaceholder: function () {\n            if (this.search.hasClass(\"select2-default\")) {\n                this.search.val(\"\").removeClass(\"select2-default\");\n            }\n        },\n\n        // multi\n        opening: function () {\n            this.clearPlaceholder(); // should be done before super so placeholder is not used to search\n            this.resizeSearch();\n\n            this.parent.opening.apply(this, arguments);\n\n            this.focusSearch();\n\n            // initializes search's value with nextSearchTerm (if defined by user)\n            // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter\n            if(this.search.val() === \"\") {\n                if(this.nextSearchTerm != undefined){\n                    this.search.val(this.nextSearchTerm);\n                    this.search.select();\n                }\n            }\n\n            this.updateResults(true);\n            if (this.opts.shouldFocusInput(this)) {\n                this.search.focus();\n            }\n            this.opts.element.trigger($.Event(\"select2-open\"));\n        },\n\n        // multi\n        close: function () {\n            if (!this.opened()) return;\n            this.parent.close.apply(this, arguments);\n        },\n\n        // multi\n        focus: function () {\n            this.close();\n            this.search.focus();\n        },\n\n        // multi\n        isFocused: function () {\n            return this.search.hasClass(\"select2-focused\");\n        },\n\n        // multi\n        updateSelection: function (data) {\n            var ids = [], filtered = [], self = this;\n\n            // filter out duplicates\n            $(data).each(function () {\n                if (indexOf(self.id(this), ids) < 0) {\n                    ids.push(self.id(this));\n                    filtered.push(this);\n                }\n            });\n            data = filtered;\n\n            this.selection.find(\".select2-search-choice\").remove();\n            $(data).each(function () {\n                self.addSelectedChoice(this);\n            });\n            self.postprocessResults();\n        },\n\n        // multi\n        tokenize: function() {\n            var input = this.search.val();\n            input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts);\n            if (input != null && input != undefined) {\n                this.search.val(input);\n                if (input.length > 0) {\n                    this.open();\n                }\n            }\n\n        },\n\n        // multi\n        onSelect: function (data, options) {\n\n            if (!this.triggerSelect(data) || data.text === \"\") { return; }\n\n            this.addSelectedChoice(data);\n\n            this.opts.element.trigger({ type: \"selected\", val: this.id(data), choice: data });\n\n            // keep track of the search's value before it gets cleared\n            this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val());\n\n            this.clearSearch();\n            this.updateResults();\n\n            if (this.select || !this.opts.closeOnSelect) this.postprocessResults(data, false, this.opts.closeOnSelect===true);\n\n            if (this.opts.closeOnSelect) {\n                this.close();\n                this.search.width(10);\n            } else {\n                if (this.countSelectableResults()>0) {\n                    this.search.width(10);\n                    this.resizeSearch();\n                    if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) {\n                        // if we reached max selection size repaint the results so choices\n                        // are replaced with the max selection reached message\n                        this.updateResults(true);\n                    } else {\n                        // initializes search's value with nextSearchTerm and update search result\n                        if(this.nextSearchTerm != undefined){\n                            this.search.val(this.nextSearchTerm);\n                            this.updateResults();\n                            this.search.select();\n                        }\n                    }\n                    this.positionDropdown();\n                } else {\n                    // if nothing left to select close\n                    this.close();\n                    this.search.width(10);\n                }\n            }\n\n            // since its not possible to select an element that has already been\n            // added we do not need to check if this is a new element before firing change\n            this.triggerChange({ added: data });\n\n            if (!options || !options.noFocus)\n                this.focusSearch();\n        },\n\n        // multi\n        cancel: function () {\n            this.close();\n            this.focusSearch();\n        },\n\n        addSelectedChoice: function (data) {\n            var enableChoice = !data.locked,\n                enabledItem = $(\n                    \"<li class='select2-search-choice'>\" +\n                    \"    <div></div>\" +\n                    \"    <a href='#' class='select2-search-choice-close' tabindex='-1'></a>\" +\n                    \"</li>\"),\n                disabledItem = $(\n                    \"<li class='select2-search-choice select2-locked'>\" +\n                    \"<div></div>\" +\n                    \"</li>\");\n            var choice = enableChoice ? enabledItem : disabledItem,\n                id = this.id(data),\n                val = this.getVal(),\n                formatted,\n                cssClass;\n\n            formatted=this.opts.formatSelection(data, choice.find(\"div\"), this.opts.escapeMarkup);\n            if (formatted != undefined) {\n                choice.find(\"div\").replaceWith(\"<div>\"+formatted+\"</div>\");\n            }\n            cssClass=this.opts.formatSelectionCssClass(data, choice.find(\"div\"));\n            if (cssClass != undefined) {\n                choice.addClass(cssClass);\n            }\n\n            if(enableChoice){\n              choice.find(\".select2-search-choice-close\")\n                  .on(\"mousedown\", killEvent)\n                  .on(\"click dblclick\", this.bind(function (e) {\n                  if (!this.isInterfaceEnabled()) return;\n\n                  this.unselect($(e.target));\n                  this.selection.find(\".select2-search-choice-focus\").removeClass(\"select2-search-choice-focus\");\n                  killEvent(e);\n                  this.close();\n                  this.focusSearch();\n              })).on(\"focus\", this.bind(function () {\n                  if (!this.isInterfaceEnabled()) return;\n                  this.container.addClass(\"select2-container-active\");\n                  this.dropdown.addClass(\"select2-drop-active\");\n              }));\n            }\n\n            choice.data(\"select2-data\", data);\n            choice.insertBefore(this.searchContainer);\n\n            val.push(id);\n            this.setVal(val);\n        },\n\n        // multi\n        unselect: function (selected) {\n            var val = this.getVal(),\n                data,\n                index;\n            selected = selected.closest(\".select2-search-choice\");\n\n            if (selected.length === 0) {\n                throw \"Invalid argument: \" + selected + \". Must be .select2-search-choice\";\n            }\n\n            data = selected.data(\"select2-data\");\n\n            if (!data) {\n                // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued\n                // and invoked on an element already removed\n                return;\n            }\n\n            var evt = $.Event(\"select2-removing\");\n            evt.val = this.id(data);\n            evt.choice = data;\n            this.opts.element.trigger(evt);\n\n            if (evt.isDefaultPrevented()) {\n                return false;\n            }\n\n            while((index = indexOf(this.id(data), val)) >= 0) {\n                val.splice(index, 1);\n                this.setVal(val);\n                if (this.select) this.postprocessResults();\n            }\n\n            selected.remove();\n\n            this.opts.element.trigger({ type: \"select2-removed\", val: this.id(data), choice: data });\n            this.triggerChange({ removed: data });\n\n            return true;\n        },\n\n        // multi\n        postprocessResults: function (data, initial, noHighlightUpdate) {\n            var val = this.getVal(),\n                choices = this.results.find(\".select2-result\"),\n                compound = this.results.find(\".select2-result-with-children\"),\n                self = this;\n\n            choices.each2(function (i, choice) {\n                var id = self.id(choice.data(\"select2-data\"));\n                if (indexOf(id, val) >= 0) {\n                    choice.addClass(\"select2-selected\");\n                    // mark all children of the selected parent as selected\n                    choice.find(\".select2-result-selectable\").addClass(\"select2-selected\");\n                }\n            });\n\n            compound.each2(function(i, choice) {\n                // hide an optgroup if it doesn't have any selectable children\n                if (!choice.is('.select2-result-selectable')\n                    && choice.find(\".select2-result-selectable:not(.select2-selected)\").length === 0) {\n                    choice.addClass(\"select2-selected\");\n                }\n            });\n\n            if (this.highlight() == -1 && noHighlightUpdate !== false){\n                self.highlight(0);\n            }\n\n            //If all results are chosen render formatNoMatches\n            if(!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0){\n                if(!data || data && !data.more && this.results.find(\".select2-no-results\").length === 0) {\n                    if (checkFormatter(self.opts.formatNoMatches, \"formatNoMatches\")) {\n                        this.results.append(\"<li class='select2-no-results'>\" + evaluate(self.opts.formatNoMatches, self.opts.element, self.search.val()) + \"</li>\");\n                    }\n                }\n            }\n\n        },\n\n        // multi\n        getMaxSearchWidth: function() {\n            return this.selection.width() - getSideBorderPadding(this.search);\n        },\n\n        // multi\n        resizeSearch: function () {\n            var minimumWidth, left, maxWidth, containerLeft, searchWidth,\n                sideBorderPadding = getSideBorderPadding(this.search);\n\n            minimumWidth = measureTextWidth(this.search) + 10;\n\n            left = this.search.offset().left;\n\n            maxWidth = this.selection.width();\n            containerLeft = this.selection.offset().left;\n\n            searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding;\n\n            if (searchWidth < minimumWidth) {\n                searchWidth = maxWidth - sideBorderPadding;\n            }\n\n            if (searchWidth < 40) {\n                searchWidth = maxWidth - sideBorderPadding;\n            }\n\n            if (searchWidth <= 0) {\n              searchWidth = minimumWidth;\n            }\n\n            this.search.width(Math.floor(searchWidth));\n        },\n\n        // multi\n        getVal: function () {\n            var val;\n            if (this.select) {\n                val = this.select.val();\n                return val === null ? [] : val;\n            } else {\n                val = this.opts.element.val();\n                return splitVal(val, this.opts.separator);\n            }\n        },\n\n        // multi\n        setVal: function (val) {\n            var unique;\n            if (this.select) {\n                this.select.val(val);\n            } else {\n                unique = [];\n                // filter out duplicates\n                $(val).each(function () {\n                    if (indexOf(this, unique) < 0) unique.push(this);\n                });\n                this.opts.element.val(unique.length === 0 ? \"\" : unique.join(this.opts.separator));\n            }\n        },\n\n        // multi\n        buildChangeDetails: function (old, current) {\n            var current = current.slice(0),\n                old = old.slice(0);\n\n            // remove intersection from each array\n            for (var i = 0; i < current.length; i++) {\n                for (var j = 0; j < old.length; j++) {\n                    if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) {\n                        current.splice(i, 1);\n                        if(i>0){\n                        \ti--;\n                        }\n                        old.splice(j, 1);\n                        j--;\n                    }\n                }\n            }\n\n            return {added: current, removed: old};\n        },\n\n\n        // multi\n        val: function (val, triggerChange) {\n            var oldData, self=this;\n\n            if (arguments.length === 0) {\n                return this.getVal();\n            }\n\n            oldData=this.data();\n            if (!oldData.length) oldData=[];\n\n            // val is an id. !val is true for [undefined,null,'',0] - 0 is legal\n            if (!val && val !== 0) {\n                this.opts.element.val(\"\");\n                this.updateSelection([]);\n                this.clearSearch();\n                if (triggerChange) {\n                    this.triggerChange({added: this.data(), removed: oldData});\n                }\n                return;\n            }\n\n            // val is a list of ids\n            this.setVal(val);\n\n            if (this.select) {\n                this.opts.initSelection(this.select, this.bind(this.updateSelection));\n                if (triggerChange) {\n                    this.triggerChange(this.buildChangeDetails(oldData, this.data()));\n                }\n            } else {\n                if (this.opts.initSelection === undefined) {\n                    throw new Error(\"val() cannot be called if initSelection() is not defined\");\n                }\n\n                this.opts.initSelection(this.opts.element, function(data){\n                    var ids=$.map(data, self.id);\n                    self.setVal(ids);\n                    self.updateSelection(data);\n                    self.clearSearch();\n                    if (triggerChange) {\n                        self.triggerChange(self.buildChangeDetails(oldData, self.data()));\n                    }\n                });\n            }\n            this.clearSearch();\n        },\n\n        // multi\n        onSortStart: function() {\n            if (this.select) {\n                throw new Error(\"Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.\");\n            }\n\n            // collapse search field into 0 width so its container can be collapsed as well\n            this.search.width(0);\n            // hide the container\n            this.searchContainer.hide();\n        },\n\n        // multi\n        onSortEnd:function() {\n\n            var val=[], self=this;\n\n            // show search and move it to the end of the list\n            this.searchContainer.show();\n            // make sure the search container is the last item in the list\n            this.searchContainer.appendTo(this.searchContainer.parent());\n            // since we collapsed the width in dragStarted, we resize it here\n            this.resizeSearch();\n\n            // update selection\n            this.selection.find(\".select2-search-choice\").each(function() {\n                val.push(self.opts.id($(this).data(\"select2-data\")));\n            });\n            this.setVal(val);\n            this.triggerChange();\n        },\n\n        // multi\n        data: function(values, triggerChange) {\n            var self=this, ids, old;\n            if (arguments.length === 0) {\n                 return this.selection\n                     .children(\".select2-search-choice\")\n                     .map(function() { return $(this).data(\"select2-data\"); })\n                     .get();\n            } else {\n                old = this.data();\n                if (!values) { values = []; }\n                ids = $.map(values, function(e) { return self.opts.id(e); });\n                this.setVal(ids);\n                this.updateSelection(values);\n                this.clearSearch();\n                if (triggerChange) {\n                    this.triggerChange(this.buildChangeDetails(old, this.data()));\n                }\n            }\n        }\n    });\n\n    $.fn.select2 = function () {\n\n        var args = Array.prototype.slice.call(arguments, 0),\n            opts,\n            select2,\n            method, value, multiple,\n            allowedMethods = [\"val\", \"destroy\", \"opened\", \"open\", \"close\", \"focus\", \"isFocused\", \"container\", \"dropdown\", \"onSortStart\", \"onSortEnd\", \"enable\", \"disable\", \"readonly\", \"positionDropdown\", \"data\", \"search\"],\n            valueMethods = [\"opened\", \"isFocused\", \"container\", \"dropdown\"],\n            propertyMethods = [\"val\", \"data\"],\n            methodsMap = { search: \"externalSearch\" };\n\n        this.each(function () {\n            if (args.length === 0 || typeof(args[0]) === \"object\") {\n                opts = args.length === 0 ? {} : $.extend({}, args[0]);\n                opts.element = $(this);\n\n                if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n                    multiple = opts.element.prop(\"multiple\");\n                } else {\n                    multiple = opts.multiple || false;\n                    if (\"tags\" in opts) {opts.multiple = multiple = true;}\n                }\n\n                select2 = multiple ? new window.Select2[\"class\"].multi() : new window.Select2[\"class\"].single();\n                select2.init(opts);\n            } else if (typeof(args[0]) === \"string\") {\n\n                if (indexOf(args[0], allowedMethods) < 0) {\n                    throw \"Unknown method: \" + args[0];\n                }\n\n                value = undefined;\n                select2 = $(this).data(\"select2\");\n                if (select2 === undefined) return;\n\n                method=args[0];\n\n                if (method === \"container\") {\n                    value = select2.container;\n                } else if (method === \"dropdown\") {\n                    value = select2.dropdown;\n                } else {\n                    if (methodsMap[method]) method = methodsMap[method];\n\n                    value = select2[method].apply(select2, args.slice(1));\n                }\n                if (indexOf(args[0], valueMethods) >= 0\n                    || (indexOf(args[0], propertyMethods) >= 0 && args.length == 1)) {\n                    return false; // abort the iteration, ready to return first matched value\n                }\n            } else {\n                throw \"Invalid arguments to select2 plugin: \" + args;\n            }\n        });\n        return (value === undefined) ? this : value;\n    };\n\n    // plugin defaults, accessible to users\n    $.fn.select2.defaults = {\n        width: \"copy\",\n        loadMorePadding: 0,\n        closeOnSelect: true,\n        openOnEnter: true,\n        containerCss: {},\n        dropdownCss: {},\n        containerCssClass: \"\",\n        dropdownCssClass: \"\",\n        formatResult: function(result, container, query, escapeMarkup) {\n            var markup=[];\n            markMatch(result.text, query.term, markup, escapeMarkup);\n            return markup.join(\"\");\n        },\n        formatSelection: function (data, container, escapeMarkup) {\n            return data ? escapeMarkup(data.text) : undefined;\n        },\n        sortResults: function (results, container, query) {\n            return results;\n        },\n        formatResultCssClass: function(data) {return data.css;},\n        formatSelectionCssClass: function(data, container) {return undefined;},\n        minimumResultsForSearch: 0,\n        minimumInputLength: 0,\n        maximumInputLength: null,\n        maximumSelectionSize: 0,\n        id: function (e) { return e == undefined ? null : e.id; },\n        matcher: function(term, text) {\n            return stripDiacritics(''+text).toUpperCase().indexOf(stripDiacritics(''+term).toUpperCase()) >= 0;\n        },\n        separator: \",\",\n        tokenSeparators: [],\n        tokenizer: defaultTokenizer,\n        escapeMarkup: defaultEscapeMarkup,\n        blurOnChange: false,\n        selectOnBlur: false,\n        adaptContainerCssClass: function(c) { return c; },\n        adaptDropdownCssClass: function(c) { return null; },\n        nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; },\n        searchInputPlaceholder: '',\n        createSearchChoicePosition: 'top',\n        shouldFocusInput: function (instance) {\n            // Attempt to detect touch devices\n            var supportsTouchEvents = (('ontouchstart' in window) ||\n                                       (navigator.msMaxTouchPoints > 0));\n\n            // Only devices which support touch events should be special cased\n            if (!supportsTouchEvents) {\n                return true;\n            }\n\n            // Never focus the input if search is disabled\n            if (instance.opts.minimumResultsForSearch < 0) {\n                return false;\n            }\n\n            return true;\n        }\n    };\n\n    $.fn.select2.locales = [];\n\n    $.fn.select2.locales['en'] = {\n         formatMatches: function (matches) { if (matches === 1) { return \"One result is available, press enter to select it.\"; } return matches + \" results are available, use up and down arrow keys to navigate.\"; },\n         formatNoMatches: function () { return \"No matches found\"; },\n         formatAjaxError: function (jqXHR, textStatus, errorThrown) { return \"Loading failed\"; },\n         formatInputTooShort: function (input, min) { var n = min - input.length; return \"Please enter \" + n + \" or more character\" + (n == 1 ? \"\" : \"s\"); },\n         formatInputTooLong: function (input, max) { var n = input.length - max; return \"Please delete \" + n + \" character\" + (n == 1 ? \"\" : \"s\"); },\n         formatSelectionTooBig: function (limit) { return \"You can only select \" + limit + \" item\" + (limit == 1 ? \"\" : \"s\"); },\n         formatLoadMore: function (pageNumber) { return \"Loading more results\u2026\"; },\n         formatSearching: function () { return \"Searching\u2026\"; },\n    };\n\n    $.extend($.fn.select2.defaults, $.fn.select2.locales['en']);\n\n    $.fn.select2.ajaxDefaults = {\n        transport: $.ajax,\n        params: {\n            type: \"GET\",\n            cache: false,\n            dataType: \"json\"\n        }\n    };\n\n    // exports\n    window.Select2 = {\n        query: {\n            ajax: ajax,\n            local: local,\n            tags: tags\n        }, util: {\n            debounce: debounce,\n            markMatch: markMatch,\n            escapeMarkup: defaultEscapeMarkup,\n            stripDiacritics: stripDiacritics\n        }, \"class\": {\n            \"abstract\": AbstractSelect2,\n            \"single\": SingleSelect2,\n            \"multi\": MultiSelect2\n        }\n    };\n\n}(jQuery));\n", "(function($) {\n\n    function getSortableUl($select) {\n        return $select.prev('.select2-container').find('ul.select2-choices');\n    };\n\n    function initSortableUl($ul, options) {\n\n        $ul.sortable({\n            forcePlaceholderSize: true,\n            items: 'li.select2-search-choice',\n            placeholder : '<li>&nbsp;</li>'\n        });\n\n        // Only bind event at initialization\n        if (options && options.bindSortEvent && options.$select) {\n            $ul.bind('sortupdate', function(e, ui) {\n                $($ul.find('li.select2-search-choice').get().reverse()).each(function() {\n                    var id = $(this).data('select2Data').id,\n                        $option = options.$select.find('option[value=\"' + id + '\"]')[0];\n\n                    options.$select.prepend($option);\n                });\n            });\n        }\n    };\n\n    function initSelect2Sortable($select) {\n\n        var observer,\n            $ul;\n\n        $select.select2({ closeOnSelect: false });\n        $ul = getSortableUl($select);\n\n        observer = new MutationObserver(function(mutations) {\n            initSortableUl($ul);\n            observer.disconnect();\n        });\n\n        $select.on('select2-selecting', function() {\n            observer.observe($ul.get(0), { subtree: false, childList: true, attributes: false });\n        });\n\n        initSortableUl($ul, { bindSortEvent: true, $select: $select });\n\n        $select.data('hasSelect2Sortable', true);\n    };\n\n\n    function sortSelect2Sortable($select, val) {\n        var $ul = getSortableUl($select),\n                $lis = $ul.find('.select2-search-choice');\n        if (val) {\n            $.each(val, function(i, id) {\n                $lis.each(function() {\n                    if (id == $(this).data('select2Data').id) {\n                        $(this).insertBefore($ul.find('.select2-search-field'));\n                    }\n                });\n            });\n            $ul.trigger('sortupdate');\n        }\n    }\n\n    $.fn.extend({\n\n        select2Sortable: function(val) {\n\n            this.each(function() {\n\n                var $select = $(this);\n\n                if (!$select.prop('multiple')) {\n                    return;\n                }\n\n                if (!$select.data('hasSelect2Sortable')) {\n                    initSelect2Sortable($select);\n\n                    var values = $select.attr('data-order');\n\n                    if (values) {\n                        sortSelect2Sortable($select, values.split(','));\n                    }\n                }\n\n                if (val && Array.isArray(val)) {\n                    sortSelect2Sortable($select, val);\n                }\n            });\n\n            return this;\n        }\n    });\n}(window.jQuery));\n", "/**\n * Select2 German translation\n */\n(function ($) {\n    \"use strict\";\n\n    $.fn.select2.locales['de'] = {\n        formatNoMatches: function () { return \"Keine \u00DCbereinstimmungen gefunden\"; },\n        formatInputTooShort: function (input, min) { var n = min - input.length; return \"Bitte \" + n + \" Zeichen mehr eingeben\"; },\n        formatInputTooLong: function (input, max) { var n = input.length - max; return \"Bitte \" + n + \" Zeichen weniger eingeben\"; },\n        formatSelectionTooBig: function (limit) { return \"Sie k\u00F6nnen nur \" + limit + \" Eintr\" + (limit === 1 ? \"ag\" : \"\u00E4ge\") + \" ausw\u00E4hlen\"; },\n        formatLoadMore: function (pageNumber) { return \"Lade mehr Ergebnisse\u2026\"; },\n        formatSearching: function () { return \"Suche\u2026\"; },\n        formatMatches: function (matches) { return matches + \" Ergebnis \" + (matches > 1 ? \"se\" : \"\") + \" verf\u00FCgbar, zum Navigieren die Hoch-/Runter-Pfeiltasten verwenden.\"; }\n    };\n\n    $.extend($.fn.select2.defaults, $.fn.select2.locales['de']);\n})(jQuery);", "/*\nVersion: @@ver@@ Timestamp: @@timestamp@@\n*/\n.select2-container {\n    margin: 0;\n    position: relative;\n    display: inline-block;\n    /* inline-block for ie7 */\n    zoom: 1;\n    *display: inline;\n    vertical-align: middle;\n}\n\n.select2-container,\n.select2-drop,\n.select2-search,\n.select2-search input {\n  /*\n    Force border-box so that % widths fit the parent\n    container without overlap because of margin/padding.\n    More Info : http://www.quirksmode.org/css/box.html\n  */\n  -webkit-box-sizing: border-box; /* webkit */\n     -moz-box-sizing: border-box; /* firefox */\n          box-sizing: border-box; /* css3 */\n}\n\n.select2-container .select2-choice {\n    display: block;\n    height: 26px;\n    padding: 0 0 0 8px;\n    overflow: hidden;\n    position: relative;\n\n    border: 1px solid #aaa;\n    white-space: nowrap;\n    line-height: 26px;\n    color: #444;\n    text-decoration: none;\n\n    border-radius: 4px;\n\n    background-clip: padding-box;\n\n    -webkit-touch-callout: none;\n      -webkit-user-select: none;\n         -moz-user-select: none;\n          -ms-user-select: none;\n              user-select: none;\n\n    background-color: #fff;\n    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));\n    background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);\n    background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);\n    background-image: linear-gradient(to top, #eee 0%, #fff 50%);\n}\n\nhtml[dir=\"rtl\"] .select2-container .select2-choice {\n    padding: 0 8px 0 0;\n}\n\n.select2-container.select2-drop-above .select2-choice {\n    border-bottom-color: #aaa;\n\n    border-radius: 0 0 4px 4px;\n\n    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));\n    background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);\n    background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);\n    background-image: linear-gradient(to bottom, #eee 0%, #fff 90%);\n}\n\n.select2-container.select2-allowclear .select2-choice .select2-chosen {\n    margin-right: 42px;\n}\n\n.select2-container .select2-choice > .select2-chosen {\n    margin-right: 26px;\n    display: block;\n    overflow: hidden;\n\n    white-space: nowrap;\n\n    text-overflow: ellipsis;\n    float: none;\n    width: auto;\n}\n\nhtml[dir=\"rtl\"] .select2-container .select2-choice > .select2-chosen {\n    margin-left: 26px;\n    margin-right: 0;\n}\n\n.select2-container .select2-choice abbr {\n    display: none;\n    width: 12px;\n    height: 12px;\n    position: absolute;\n    right: 24px;\n    top: 8px;\n\n    font-size: 1px;\n    text-decoration: none;\n\n    border: 0;\n    background: url('select2.png') right top no-repeat;\n    cursor: pointer;\n    outline: 0;\n}\n\n.select2-container.select2-allowclear .select2-choice abbr {\n    display: inline-block;\n}\n\n.select2-container .select2-choice abbr:hover {\n    background-position: right -11px;\n    cursor: pointer;\n}\n\n.select2-drop-mask {\n    border: 0;\n    margin: 0;\n    padding: 0;\n    position: fixed;\n    left: 0;\n    top: 0;\n    min-height: 100%;\n    min-width: 100%;\n    height: auto;\n    width: auto;\n    opacity: 0;\n    z-index: 9998;\n    /* styles required for IE to work */\n    background-color: #fff;\n    filter: alpha(opacity=0);\n}\n\n.select2-drop {\n    width: 100%;\n    margin-top: -1px;\n    position: absolute;\n    z-index: 9999;\n    top: 100%;\n\n    background: #fff;\n    color: #000;\n    border: 1px solid #aaa;\n    border-top: 0;\n\n    border-radius: 0 0 4px 4px;\n\n    -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);\n            box-shadow: 0 4px 5px rgba(0, 0, 0, .15);\n}\n\n.select2-drop.select2-drop-above {\n    margin-top: 1px;\n    border-top: 1px solid #aaa;\n    border-bottom: 0;\n\n    border-radius: 4px 4px 0 0;\n\n    -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);\n            box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);\n}\n\n.select2-drop-active {\n    border: 1px solid #5897fb;\n    border-top: none;\n}\n\n.select2-drop.select2-drop-above.select2-drop-active {\n    border-top: 1px solid #5897fb;\n}\n\n.select2-drop-auto-width {\n    border-top: 1px solid #aaa;\n    width: auto;\n}\n\n.select2-drop-auto-width .select2-search {\n    padding-top: 4px;\n}\n\n.select2-container .select2-choice .select2-arrow {\n    display: inline-block;\n    width: 18px;\n    height: 100%;\n    position: absolute;\n    right: 0;\n    top: 0;\n\n    border-left: 1px solid #aaa;\n    border-radius: 0 4px 4px 0;\n\n    background-clip: padding-box;\n\n    background: #ccc;\n    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));\n    background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);\n    background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);\n    background-image: linear-gradient(to top, #ccc 0%, #eee 60%);\n}\n\nhtml[dir=\"rtl\"] .select2-container .select2-choice .select2-arrow {\n    left: 0;\n    right: auto;\n\n    border-left: none;\n    border-right: 1px solid #aaa;\n    border-radius: 4px 0 0 4px;\n}\n\n.select2-container .select2-choice .select2-arrow b {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background: url('select2.png') no-repeat 0 1px;\n}\n\nhtml[dir=\"rtl\"] .select2-container .select2-choice .select2-arrow b {\n    background-position: 2px 1px;\n}\n\n.select2-search {\n    display: inline-block;\n    width: 100%;\n    min-height: 26px;\n    margin: 0;\n    padding-left: 4px;\n    padding-right: 4px;\n\n    position: relative;\n    z-index: 10000;\n\n    white-space: nowrap;\n}\n\n.select2-search input {\n    width: 100%;\n    height: auto !important;\n    min-height: 26px;\n    padding: 4px 20px 4px 5px;\n    margin: 0;\n\n    outline: 0;\n    font-family: sans-serif;\n    font-size: 1em;\n\n    border: 1px solid #aaa;\n    border-radius: 0;\n\n    -webkit-box-shadow: none;\n            box-shadow: none;\n\n    background: #fff url('select2.png') no-repeat 100% -22px;\n    background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));\n    background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;\n}\n\nhtml[dir=\"rtl\"] .select2-search input {\n    padding: 4px 5px 4px 20px;\n\n    background: #fff url('select2.png') no-repeat -37px -22px;\n    background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));\n    background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;\n}\n\n.select2-drop.select2-drop-above .select2-search input {\n    margin-top: 4px;\n}\n\n.select2-search input.select2-active {\n    background: #fff url('select2-spinner.gif') no-repeat 100%;\n    background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));\n    background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;\n}\n\n.select2-container-active .select2-choice,\n.select2-container-active .select2-choices {\n    border: 1px solid #5897fb;\n    outline: none;\n\n    -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);\n            box-shadow: 0 0 5px rgba(0, 0, 0, .3);\n}\n\n.select2-dropdown-open .select2-choice {\n    border-bottom-color: transparent;\n    -webkit-box-shadow: 0 1px 0 #fff inset;\n            box-shadow: 0 1px 0 #fff inset;\n\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n\n    background-color: #eee;\n    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));\n    background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);\n    background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);\n    background-image: linear-gradient(to top, #fff 0%, #eee 50%);\n}\n\n.select2-dropdown-open.select2-drop-above .select2-choice,\n.select2-dropdown-open.select2-drop-above .select2-choices {\n    border: 1px solid #5897fb;\n    border-top-color: transparent;\n\n    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));\n    background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);\n    background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);\n    background-image: linear-gradient(to bottom, #fff 0%, #eee 50%);\n}\n\n.select2-dropdown-open .select2-choice .select2-arrow {\n    background: transparent;\n    border-left: none;\n    filter: none;\n}\nhtml[dir=\"rtl\"] .select2-dropdown-open .select2-choice .select2-arrow {\n    border-right: none;\n}\n\n.select2-dropdown-open .select2-choice .select2-arrow b {\n    background-position: -18px 1px;\n}\n\nhtml[dir=\"rtl\"] .select2-dropdown-open .select2-choice .select2-arrow b {\n    background-position: -16px 1px;\n}\n\n.select2-hidden-accessible {\n    border: 0;\n    clip: rect(0 0 0 0);\n    height: 1px;\n    margin: -1px;\n    overflow: hidden;\n    padding: 0;\n    position: absolute;\n    width: 1px;\n}\n\n/* results */\n.select2-results {\n    max-height: 200px;\n    padding: 0 0 0 4px;\n    margin: 4px 4px 4px 0;\n    position: relative;\n    overflow-x: hidden;\n    overflow-y: auto;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhtml[dir=\"rtl\"] .select2-results {\n    padding: 0 4px 0 0;\n    margin: 4px 0 4px 4px;\n}\n\n.select2-results ul.select2-result-sub {\n    margin: 0;\n    padding-left: 0;\n}\n\n.select2-results li {\n    list-style: none;\n    display: list-item;\n    background-image: none;\n}\n\n.select2-results li.select2-result-with-children > .select2-result-label {\n    font-weight: bold;\n}\n\n.select2-results .select2-result-label {\n    padding: 3px 7px 4px;\n    margin: 0;\n    cursor: pointer;\n\n    min-height: 1em;\n\n    -webkit-touch-callout: none;\n      -webkit-user-select: none;\n         -moz-user-select: none;\n          -ms-user-select: none;\n              user-select: none;\n}\n\n.select2-results-dept-1 .select2-result-label { padding-left: 20px }\n.select2-results-dept-2 .select2-result-label { padding-left: 40px }\n.select2-results-dept-3 .select2-result-label { padding-left: 60px }\n.select2-results-dept-4 .select2-result-label { padding-left: 80px }\n.select2-results-dept-5 .select2-result-label { padding-left: 100px }\n.select2-results-dept-6 .select2-result-label { padding-left: 110px }\n.select2-results-dept-7 .select2-result-label { padding-left: 120px }\n\n.select2-results .select2-highlighted {\n    background: #3875d7;\n    color: #fff;\n}\n\n.select2-results li em {\n    background: #feffde;\n    font-style: normal;\n}\n\n.select2-results .select2-highlighted em {\n    background: transparent;\n}\n\n.select2-results .select2-highlighted ul {\n    background: #fff;\n    color: #000;\n}\n\n.select2-results .select2-no-results,\n.select2-results .select2-searching,\n.select2-results .select2-ajax-error,\n.select2-results .select2-selection-limit {\n    background: #f4f4f4;\n    display: list-item;\n    padding-left: 5px;\n}\n\n/*\ndisabled look for disabled choices in the results dropdown\n*/\n.select2-results .select2-disabled.select2-highlighted {\n    color: #666;\n    background: #f4f4f4;\n    display: list-item;\n    cursor: default;\n}\n.select2-results .select2-disabled {\n  background: #f4f4f4;\n  display: list-item;\n  cursor: default;\n}\n\n.select2-results .select2-selected {\n    display: none;\n}\n\n.select2-more-results.select2-active {\n    background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;\n}\n\n.select2-results .select2-ajax-error {\n    background: rgba(255, 50, 50, .2);\n}\n\n.select2-more-results {\n    background: #f4f4f4;\n    display: list-item;\n}\n\n/* disabled styles */\n\n.select2-container.select2-container-disabled .select2-choice {\n    background-color: #f4f4f4;\n    background-image: none;\n    border: 1px solid #ddd;\n    cursor: default;\n}\n\n.select2-container.select2-container-disabled .select2-choice .select2-arrow {\n    background-color: #f4f4f4;\n    background-image: none;\n    border-left: 0;\n}\n\n.select2-container.select2-container-disabled .select2-choice abbr {\n    display: none;\n}\n\n\n/* multiselect */\n\n.select2-container-multi .select2-choices {\n    height: auto !important;\n    height: 1%;\n    margin: 0;\n    padding: 0 5px 0 0;\n    position: relative;\n\n    border: 1px solid #aaa;\n    cursor: text;\n    overflow: hidden;\n\n    background-color: #fff;\n    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));\n    background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);\n    background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);\n    background-image: linear-gradient(to bottom, #eee 1%, #fff 15%);\n}\n\nhtml[dir=\"rtl\"] .select2-container-multi .select2-choices {\n    padding: 0 0 0 5px;\n}\n\n.select2-locked {\n  padding: 3px 5px 3px 5px !important;\n}\n\n.select2-container-multi .select2-choices {\n    min-height: 26px;\n}\n\n.select2-container-multi.select2-container-active .select2-choices {\n    border: 1px solid #5897fb;\n    outline: none;\n\n    -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);\n            box-shadow: 0 0 5px rgba(0, 0, 0, .3);\n}\n.select2-container-multi .select2-choices li {\n    float: left;\n    list-style: none;\n}\nhtml[dir=\"rtl\"] .select2-container-multi .select2-choices li\n{\n    float: right;\n}\n.select2-container-multi .select2-choices .select2-search-field {\n    margin: 0;\n    padding: 0;\n    white-space: nowrap;\n}\n\n.select2-container-multi .select2-choices .select2-search-field input {\n    padding: 5px;\n    margin: 1px 0;\n\n    font-family: sans-serif;\n    font-size: 100%;\n    color: #666;\n    outline: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n    background: transparent !important;\n}\n\n.select2-container-multi .select2-choices .select2-search-field input.select2-active {\n    background: #fff url('select2-spinner.gif') no-repeat 100% !important;\n}\n\n.select2-default {\n    color: #999 !important;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice {\n    padding: 3px 5px 3px 18px;\n    margin: 3px 0 3px 5px;\n    position: relative;\n\n    line-height: 13px;\n    color: #333;\n    cursor: default;\n    border: 1px solid #aaaaaa;\n\n    border-radius: 3px;\n\n    -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);\n            box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);\n\n    background-clip: padding-box;\n\n    -webkit-touch-callout: none;\n      -webkit-user-select: none;\n         -moz-user-select: none;\n          -ms-user-select: none;\n              user-select: none;\n\n    background-color: #e4e4e4;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);\n    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));\n    background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);\n    background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);\n    background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);\n}\nhtml[dir=\"rtl\"] .select2-container-multi .select2-choices .select2-search-choice\n{\n    margin: 3px 5px 3px 0;\n    padding: 3px 18px 3px 5px;\n}\n.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {\n    cursor: default;\n}\n.select2-container-multi .select2-choices .select2-search-choice-focus {\n    background: #d4d4d4;\n}\n\n.select2-search-choice-close {\n    display: block;\n    width: 12px;\n    height: 13px;\n    position: absolute;\n    right: 3px;\n    top: 4px;\n\n    font-size: 1px;\n    outline: none;\n    background: url('select2.png') right top no-repeat;\n}\nhtml[dir=\"rtl\"] .select2-search-choice-close {\n    right: auto;\n    left: 3px;\n}\n\n.select2-container-multi .select2-search-choice-close {\n    left: 3px;\n}\n\nhtml[dir=\"rtl\"] .select2-container-multi .select2-search-choice-close {\n    left: auto;\n    right: 2px;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {\n  background-position: right -11px;\n}\n.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {\n    background-position: right -11px;\n}\n\n/* disabled styles */\n.select2-container-multi.select2-container-disabled .select2-choices {\n    background-color: #f4f4f4;\n    background-image: none;\n    border: 1px solid #ddd;\n    cursor: default;\n}\n\n.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {\n    padding: 3px 5px 3px 5px;\n    border: 1px solid #ddd;\n    background-image: none;\n    background-color: #f4f4f4;\n}\n\n.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close {    display: none;\n    background: none;\n}\n/* end multiselect */\n\n\n.select2-result-selectable .select2-match,\n.select2-result-unselectable .select2-match {\n    text-decoration: underline;\n}\n\n.select2-offscreen, .select2-offscreen:focus {\n    clip: rect(0 0 0 0) !important;\n    width: 1px !important;\n    height: 1px !important;\n    border: 0 !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    overflow: hidden !important;\n    position: absolute !important;\n    outline: 0 !important;\n    left: 0px !important;\n    top: 0px !important;\n}\n\n.select2-display-none {\n    display: none;\n}\n\n.select2-measure-scrollbar {\n    position: absolute;\n    top: -10000px;\n    left: -10000px;\n    width: 100px;\n    height: 100px;\n    overflow: scroll;\n}\n\n/* Retina-ize icons */\n\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx)  {\n    .select2-search input,\n    .select2-search-choice-close,\n    .select2-container .select2-choice abbr,\n    .select2-container .select2-choice .select2-arrow b {\n        background-image: url('select2x2.png') !important;\n        background-repeat: no-repeat !important;\n        background-size: 60px 40px !important;\n    }\n\n    .select2-search input {\n        background-position: 100% -21px !important;\n    }\n}\n", "/**\n * Select2 Bootstrap 3 CSS v1.4.1\n * Tested with Bootstrap v3.2.0 and Select2 v3.3.2, v3.4.1-v3.4.5, v3.5.1, master\n * in latest Chrome, Safari, Firefox, Opera (Mac) and IE8-IE11\n * MIT License\n */\n/**\n * Reset Bootstrap 3 .form-control styles which - if applied to the\n * original <select>-element the Select2-plugin may be run against -\n * are copied to the .select2-container.\n *\n * 1. Overwrite .select2-container's original display:inline-block\n *    with Bootstrap 3's default for .form-control, display:block;\n *    courtesy of @juristr (@see https://github.com/fk/select2-bootstrap-css/pull/1)\n */\n.select2-container.form-control {\n    background: transparent;\n    border: none;\n    display: block;\n    /* 1 */\n    margin: 0;\n    padding: 0;\n}\n\n/**\n * Adjust Select2 inputs to fit Bootstrap 3 default .form-control appearance.\n */\n.select2-container .select2-choices .select2-search-field input,\n.select2-container .select2-choice,\n.select2-container .select2-choices {\n    background: none;\n    padding: 0;\n    border-color: #cccccc;\n    border-radius: 4px;\n    color: #555555;\n    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n    background-color: white;\n    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.select2-search input {\n    border-color: #cccccc;\n    border-radius: 4px;\n    color: #555555;\n    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n    background-color: white;\n    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.select2-container .select2-choices .select2-search-field input {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\n/**\n * Adjust Select2 input heights to match the Bootstrap default.\n */\n.select2-container .select2-choice {\n    height: 34px;\n    line-height: 1.42857;\n}\n\n/**\n * Address Multi Select2's height which - depending on how many elements have been selected -\n * may grown higher than their initial size.\n */\n.select2-container.select2-container-multi.form-control {\n    height: auto;\n}\n\n/**\n * Address Bootstrap 3 control sizing classes\n * @see http://getbootstrap.com/css/#forms-control-sizes\n */\n.select2-container.input-sm .select2-choice,\n.input-group-sm .select2-container .select2-choice {\n    height: 30px;\n    line-height: 1.5;\n    border-radius: 3px;\n}\n\n.select2-container.input-lg .select2-choice,\n.input-group-lg .select2-container .select2-choice {\n    height: 46px;\n    line-height: 1.33;\n    border-radius: 6px;\n}\n\n.select2-container-multi .select2-choices .select2-search-field input {\n    height: 32px;\n}\n\n.select2-container-multi.input-sm .select2-choices .select2-search-field input,\n.input-group-sm .select2-container-multi .select2-choices .select2-search-field input {\n    height: 28px;\n}\n\n.select2-container-multi.input-lg .select2-choices .select2-search-field input,\n.input-group-lg .select2-container-multi .select2-choices .select2-search-field input {\n    height: 44px;\n}\n\n/**\n * Adjust height and line-height for .select2-search-field amd multi-select Select2 widgets.\n *\n * 1. Class repetition to address missing .select2-chosen in Select2 < 3.3.2.\n */\n.select2-container-multi .select2-choices .select2-search-field input {\n    margin: 0;\n}\n\n.select2-chosen,\n.select2-choice > span:first-child,\n.select2-container .select2-choices .select2-search-field input {\n    padding: 6px 12px;\n}\n\n.input-sm .select2-chosen,\n.input-group-sm .select2-chosen,\n.input-sm .select2-choice > span:first-child,\n.input-group-sm .select2-choice > span:first-child,\n.input-sm .select2-choices .select2-search-field input,\n.input-group-sm .select2-choices .select2-search-field input {\n    padding: 5px 10px;\n}\n\n.input-lg .select2-chosen,\n.input-group-lg .select2-chosen,\n.input-lg .select2-choice > span:first-child,\n.input-group-lg .select2-choice > span:first-child,\n.input-lg .select2-choices .select2-search-field input,\n.input-group-lg .select2-choices .select2-search-field input {\n    padding: 10px 16px;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice {\n    margin-top: 5px;\n    margin-bottom: 3px;\n}\n\n.select2-container-multi.input-sm .select2-choices .select2-search-choice,\n.input-group-sm .select2-container-multi .select2-choices .select2-search-choice {\n    margin-top: 3px;\n    margin-bottom: 2px;\n}\n\n.select2-container-multi.input-lg .select2-choices .select2-search-choice,\n.input-group-lg .select2-container-multi .select2-choices .select2-search-choice {\n    line-height: 24px;\n}\n\n/**\n * Adjust the single Select2's dropdown arrow button appearance.\n *\n * 1. For Select2 v.3.3.2.\n */\n.select2-container .select2-choice .select2-arrow,\n.select2-container .select2-choice div {\n    border-left: 1px solid #cccccc;\n    background: none;\n    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n\n.select2-dropdown-open .select2-choice .select2-arrow,\n.select2-dropdown-open .select2-choice div {\n    border-left-color: transparent;\n    background: none;\n    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n\n/**\n * Adjust the dropdown arrow button icon position for the single-select Select2 elements\n * to make it line up vertically now that we increased the height of .select2-container.\n *\n * 1. Class repetition to address missing .select2-chosen in Select2 v.3.3.2.\n */\n.select2-container .select2-choice .select2-arrow b,\n.select2-container .select2-choice div b {\n    background-position: 0 3px;\n}\n\n.select2-dropdown-open .select2-choice .select2-arrow b,\n.select2-dropdown-open .select2-choice div b {\n    background-position: -18px 3px;\n}\n\n.select2-container.input-sm .select2-choice .select2-arrow b,\n.input-group-sm .select2-container .select2-choice .select2-arrow b,\n.select2-container.input-sm .select2-choice div b,\n.input-group-sm .select2-container .select2-choice div b {\n    background-position: 0 1px;\n}\n\n.select2-dropdown-open.input-sm .select2-choice .select2-arrow b,\n.input-group-sm .select2-dropdown-open .select2-choice .select2-arrow b,\n.select2-dropdown-open.input-sm .select2-choice div b,\n.input-group-sm .select2-dropdown-open .select2-choice div b {\n    background-position: -18px 1px;\n}\n\n.select2-container.input-lg .select2-choice .select2-arrow b,\n.input-group-lg .select2-container .select2-choice .select2-arrow b,\n.select2-container.input-lg .select2-choice div b,\n.input-group-lg .select2-container .select2-choice div b {\n    background-position: 0 9px;\n}\n\n.select2-dropdown-open.input-lg .select2-choice .select2-arrow b,\n.input-group-lg .select2-dropdown-open .select2-choice .select2-arrow b,\n.select2-dropdown-open.input-lg .select2-choice div b,\n.input-group-lg .select2-dropdown-open .select2-choice div b {\n    background-position: -18px 9px;\n}\n\n/**\n * Address Bootstrap's validation states and change Select2's border colors and focus states.\n * Apply .has-warning, .has-danger or .has-succes to #select2-drop to match Bootstraps' colors.\n */\n.has-warning .select2-choice,\n.has-warning .select2-choices {\n    border-color: #8a6d3b;\n}\n.has-warning .select2-container-active .select2-choice,\n.has-warning .select2-container-multi.select2-container-active .select2-choices {\n    border-color: #66512c;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning.select2-drop-active {\n    border-color: #66512c;\n}\n.has-warning.select2-drop-active.select2-drop.select2-drop-above {\n    border-top-color: #66512c;\n}\n\n.has-error .select2-choice,\n.has-error .select2-choices {\n    border-color: #a94442;\n}\n.has-error .select2-container-active .select2-choice,\n.has-error .select2-container-multi.select2-container-active .select2-choices {\n    border-color: #843534;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error.select2-drop-active {\n    border-color: #843534;\n}\n.has-error.select2-drop-active.select2-drop.select2-drop-above {\n    border-top-color: #843534;\n}\n\n.has-success .select2-choice,\n.has-success .select2-choices {\n    border-color: #3c763d;\n}\n.has-success .select2-container-active .select2-choice,\n.has-success .select2-container-multi.select2-container-active .select2-choices {\n    border-color: #2b542c;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success.select2-drop-active {\n    border-color: #2b542c;\n}\n.has-success.select2-drop-active.select2-drop.select2-drop-above {\n    border-top-color: #2b542c;\n}\n\n/**\n * Make Select2's active-styles - applied to .select2-container when the widget receives focus -\n * fit Bootstrap 3's .form-element:focus appearance.\n */\n.select2-container-active .select2-choice,\n.select2-container-multi.select2-container-active .select2-choices {\n    border-color: #66afe9;\n    outline: none;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);\n    -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n    -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n    transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.select2-drop-active {\n    border-color: #66afe9;\n}\n\n.select2-drop-auto-width,\n.select2-drop.select2-drop-above.select2-drop-active {\n    border-top-color: #66afe9;\n}\n\n/**\n * Select2 widgets in Bootstrap Input Groups\n *\n * When Select2 widgets are combined with other elements using Bootstrap 3's\n * \"Input Group\" component, we don't want specific edges of the Select2 container\n * to have a border-radius.\n *\n * In Bootstrap 2, input groups required a markup where these style adjustments\n * could be bound to a CSS-class identifying if the additional elements are appended,\n * prepended or both.\n *\n * Bootstrap 3 doesn't rely on these classes anymore, so we have to use our own.\n * Use .select2-bootstrap-prepend and .select2-bootstrap-append on a Bootstrap 3 .input-group\n * to let the contained Select2 widget know which edges should not be rounded as they are\n * directly followed by another element.\n *\n * @see http://getbootstrap.com/components/#input-groups\n */\n.input-group.select2-bootstrap-prepend [class^=\"select2-choice\"] {\n    border-bottom-left-radius: 0 !important;\n    border-top-left-radius: 0 !important;\n}\n\n.input-group.select2-bootstrap-append [class^=\"select2-choice\"] {\n    border-bottom-right-radius: 0 !important;\n    border-top-right-radius: 0 !important;\n}\n\n.select2-dropdown-open [class^=\"select2-choice\"] {\n    border-bottom-right-radius: 0 !important;\n    border-bottom-left-radius: 0 !important;\n}\n\n.select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-top-right-radius: 0 !important;\n    border-top-left-radius: 0 !important;\n    border-bottom-right-radius: 4px !important;\n    border-bottom-left-radius: 4px !important;\n}\n.input-group.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-left-radius: 0 !important;\n    border-top-left-radius: 0 !important;\n}\n.input-group.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-right-radius: 0 !important;\n    border-top-right-radius: 0 !important;\n}\n.input-group.input-group-sm.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-right-radius: 3px !important;\n}\n.input-group.input-group-lg.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-right-radius: 6px !important;\n}\n.input-group.input-group-sm.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-left-radius: 3px !important;\n}\n.input-group.input-group-lg.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-left-radius: 6px !important;\n}\n\n/**\n * Adjust Select2's choices hover and selected styles to match Bootstrap 3's default dropdown styles.\n */\n.select2-results .select2-highlighted {\n    color: white;\n    background-color: #428bca;\n}\n\n/**\n * Adjust alignment of Bootstrap 3 buttons in Bootstrap 3 Input Groups to address\n * Multi Select2's height which - depending on how many elements have been selected -\n * may grown higher than their initial size.\n */\n.select2-bootstrap-append .select2-container-multiple,\n.select2-bootstrap-append .input-group-btn,\n.select2-bootstrap-append .input-group-btn .btn,\n.select2-bootstrap-prepend .select2-container-multiple,\n.select2-bootstrap-prepend .input-group-btn,\n.select2-bootstrap-prepend .input-group-btn .btn {\n    vertical-align: top;\n}\n\n/**\n * Make Multi Select2's choices match Bootstrap 3's default button styles.\n */\n.select2-container-multi .select2-choices .select2-search-choice {\n    color: #555555;\n    background: white;\n    border-color: #cccccc;\n    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice-focus {\n    background: #ebebeb;\n    border-color: #adadad;\n    color: #333333;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\n/**\n * Address Multi Select2's choice close-button vertical alignment.\n */\n.select2-search-choice-close {\n    margin-top: -7px;\n    top: 50%;\n}\n\n/**\n * Adjust the single Select2's clear button position (used to reset the select box\n * back to the placeholder value and visible once a selection is made\n * activated by Select2's \"allowClear\" option).\n */\n.select2-container .select2-choice abbr {\n    top: 50%;\n}\n\n/**\n * Adjust \"no results\" and \"selection limit\" messages to make use\n * of Bootstrap 3's default \"Alert\" style.\n *\n * @see http://getbootstrap.com/components/#alerts-default\n */\n.select2-results .select2-no-results,\n.select2-results .select2-searching,\n.select2-results .select2-selection-limit {\n    background-color: #fcf8e3;\n    color: #8a6d3b;\n}\n\n/**\n * Address disabled Select2 styles.\n *\n * 1. For Select2 v.3.3.2.\n * 2. Revert border-left:0 inherited from Select2's CSS to prevent the arrow\n *    from jumping when switching from disabled to enabled state and vice versa.\n */\n.select2-container.select2-container-disabled .select2-choice,\n.select2-container.select2-container-disabled .select2-choices {\n    cursor: not-allowed;\n    background-color: #eeeeee;\n    border-color: #cccccc;\n}\n.select2-container.select2-container-disabled .select2-choice .select2-arrow,\n.select2-container.select2-container-disabled .select2-choice div,\n.select2-container.select2-container-disabled .select2-choices .select2-arrow,\n.select2-container.select2-container-disabled .select2-choices div {\n    background-color: transparent;\n    border-left: 1px solid transparent;\n    /* 2 */\n}\n\n/**\n * Address Select2's loading indicator position - which should not stick\n * to the right edge of Select2's search input.\n *\n * 1. in .select2-search input\n * 2. in Multi Select2's .select2-search-field input\n * 3. in the status-message of infinite-scroll with remote data (@see http://ivaynberg.github.io/select2/#infinite)\n *\n * These styles alter Select2's default background-position of 100%\n * and supply the new background-position syntax to browsers which support it:\n *\n * 1. Android, Safari < 6/Mobile, IE<9: change to a relative background-position of 99%\n * 2. Chrome 25+, Firefox 13+, IE 9+, Opera 10.5+: use the new CSS3-background-position syntax\n *\n * @see http://www.w3.org/TR/css3-background/#background-position\n *\n * @todo Since both Select2 and Bootstrap 3 only support IE8 and above,\n * we could use the :after-pseudo-element to display the loading indicator.\n * Alternatively, we could supply an altered loading indicator image which already\n * contains an offset to the right.\n */\n.select2-search input.select2-active,\n.select2-container-multi .select2-choices .select2-search-field input.select2-active,\n.select2-more-results.select2-active {\n    background-position: 99%;\n    /* 4 */\n    background-position: right 4px center;\n    /* 5 */\n}\n\n/**\n * To support Select2 pre v3.4.2 in combination with Bootstrap v3.2.0,\n * ensure that .select2-offscreen width, height and position can not be overwritten.\n *\n * This adresses changes in Bootstrap somewhere after the initial v3.0.0 which -\n * in combination with Select2's pre-v3.4.2 CSS missing the \"!important\" after\n * the following rules - allow Bootstrap to overwrite the latter, which results in\n * the original <select> element Select2 is replacing not be properly being hidden\n * when used in a \"Bootstrap Input Group with Addon\".\n **/\n.select2-offscreen,\n.select2-offscreen:focus {\n    width: 1px !important;\n    height: 1px !important;\n    position: absolute !important;\n}\n", ".select2-container .select2-choices {\n  font-family: inherit;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice-focus {\n  background: none;\n}\n\n.select2-dropdown-open.select2-drop-above .select2-choice,\n.select2-dropdown-open.select2-drop-above .select2-choices {\n  background: none;\n}\n\n.select2-container .select2-choices .select2-search-field input, .select2-container .select2-choice, .select2-container .select2-choices {\n  -webkit-border-radius: 0 !important;\n  -moz-border-radius: 0 !important;\n  border-radius: 0 !important;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice {\n  -webkit-border-radius: 0 !important;\n  -moz-border-radius: 0 !important;\n  border-radius: 0 !important;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUva3Vyc28vYXBwcy9rdXJzby9yZWxlYXNlcy8yMDI2MDkzMDEyNDk1My9hcHAvamF2YXNjcmlwdC9jb21wb25lbnRzL3NlbGVjdDIiLCJzb3VyY2VzIjpbInNlbGVjdDIta3Vyc28uc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtBQUFBO0VBRUk7OztBQUdKO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1jaG9pY2VzIHtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbn1cblxuLnNlbGVjdDItY29udGFpbmVyLW11bHRpIC5zZWxlY3QyLWNob2ljZXMgLnNlbGVjdDItc2VhcmNoLWNob2ljZS1mb2N1cyB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbn1cblxuLnNlbGVjdDItZHJvcGRvd24tb3Blbi5zZWxlY3QyLWRyb3AtYWJvdmUgLnNlbGVjdDItY2hvaWNlLFxuLnNlbGVjdDItZHJvcGRvd24tb3Blbi5zZWxlY3QyLWRyb3AtYWJvdmUgLnNlbGVjdDItY2hvaWNlcyB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbn1cblxuLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZXMgLnNlbGVjdDItc2VhcmNoLWZpZWxkIGlucHV0LCAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlLCAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlcyB7XG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xufVxuXG4uc2VsZWN0Mi1jb250YWluZXItbXVsdGkgLnNlbGVjdDItY2hvaWNlcyAuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlIHtcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG59XG4iXX0= */", ".select2-container-multi.sortable .select2-choices .select2-search-choice {\n    cursor: move;\n}\n\n/*.select2-container {*/\n/*    display: block;*/\n/*    width: 100%;*/\n/*}*/\n\n/*.select2-choices {*/\n/*    border-radius: 0px;*/\n/*    border-color: #d0d0d0;*/\n/*}*/\n\n/*.select2-container-multi .select2-choices {*/\n/*    border-color: #d0d0d0;*/\n/*    padding: 0px;*/\n/*}*/\n\n/*.select2-drop {*/\n/*    border-radius: 0px;*/\n/*}*/\n\n/*.select2-container-multi.select2-container-active {*/\n/*    border-color: #646464;*/\n/*}*/\n\n/*.select2-container-multi.select2-container-active .select2-choices {*/\n/*    border-color: #646464;*/\n/*}*/\n\n/*.select2-drop-active {*/\n/*    border-color: #646464;*/\n/*}*/\n\n.select2-container-multi.sortable .select2-choices {\n    padding: 4px 4px 4px 4px;\n    border-radius: 0;\n}\n\n.select2-container-multi.sortable .select2-choices .select2-search-choice {\n    /*background: #646464;*/\n    /*color: #fdfdfd;*/\n    /*width: 90%;*/\n    /*margin: 0 0 2px 0;*/\n    /*border: 0px;*/\n    /*border-radius: 0px;*/\n    /*padding: 10px 10px 10px 30px;*/\n    /*box-shadow: 0 0 0px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);*/\n    border-radius: 2px;\n    background: #f4f4f4;\n    margin: 0 0 3px 0;\n    padding: 10px 10px 10px 25px;\n    border: none;\n    border-left: 2px solid #e6e7e8;\n    color: #444;\n    float: none;\n}\n\n.select2-container-multi.sortable .select2-search-choice-close {\n    left: 10px;\n    top: 10px;\n    margin: 0;\n}\n\n/*.select2-results .select2-highlighted {*/\n/*    background: #2f73b6;*/\n/*}*/\n", "require('select2');\nrequire('./select2_sortable');\nrequire('select2/select2_locale_de');\nrequire('select2/select2.css');\nrequire('./select2-bootstrap.css');\nrequire('select2/')\nrequire('./select2-kurso.scss');\nrequire('./select2-sortable.css');\n", "/*! @preserve\r\n * bootbox.locales.js\r\n * version: 6.0.4\r\n * author: Nick Payne <nick@kurai.co.uk>\r\n * license: MIT\r\n * http://bootboxjs.com/\r\n */\r\n(function(global, factory) {\r\n  'use strict';\r\n  if (typeof define === 'function' && define.amd) {\r\n    define(['bootbox'], factory);\r\n  } else if (typeof module === 'object' && module.exports) {\r\n    factory(require('./bootbox'));\r\n  } else {\r\n    factory(global.bootbox);\r\n  }\r\n}(this, function(bootbox) {\r\n  'use strict';\r\n\r\n  // locale : Arabic\r\n  // author : Emad Omar\r\n  bootbox.addLocale('ar', {\r\n    OK: '\u0645\u0648\u0627\u0641\u0642',\r\n    CANCEL: '\u0627\u0644\u063A\u0627\u0621',\r\n    CONFIRM: '\u062A\u0623\u0643\u064A\u062F'\r\n  });\r\n  // locale : Azerbaijani\r\n  // author : Valentin Belousov\r\n  bootbox.addLocale('az', {\r\n    OK: 'OK',\r\n    CANCEL: '\u0130mtina et',\r\n    CONFIRM: 'T\u0259sdiq et'\r\n  });\r\n  // locale : Bulgarian\r\n  // author :  mraiur\r\n  bootbox.addLocale('bg-BG', {\r\n    OK: '\u041E\u043A',\r\n    CANCEL: '\u041E\u0442\u043A\u0430\u0437',\r\n    CONFIRM: '\u041F\u043E\u0442\u0432\u044A\u0440\u0436\u0434\u0430\u0432\u0430\u043C'\r\n  });\r\n  // locale : Czech\r\n  // author : Luk\u00E1\u0161 Fry\u010D\r\n  bootbox.addLocale('cs', {\r\n    OK: 'OK',\r\n    CANCEL: 'Zru\u0161it',\r\n    CONFIRM: 'Potvrdit'\r\n  });\r\n  // locale : Danish\r\n  // author : Frederik Alk\u00E6rsig\r\n  bootbox.addLocale('da', {\r\n    OK: 'OK',\r\n    CANCEL: 'Annuller',\r\n    CONFIRM: 'Accepter'\r\n  });\r\n  // locale : German\r\n  // author : Nick Payne\r\n  bootbox.addLocale('de', {\r\n    OK: 'OK',\r\n    CANCEL: 'Abbrechen',\r\n    CONFIRM: 'Akzeptieren'\r\n  });\r\n  // locale : Greek\r\n  // author : Tolis Emmanouilidis\r\n  bootbox.addLocale('el', {\r\n    OK: '\u0395\u03BD\u03C4\u03AC\u03BE\u03B5\u03B9',\r\n    CANCEL: '\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7',\r\n    CONFIRM: '\u0395\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03AF\u03C9\u03C3\u03B7'\r\n  });\r\n  // locale : English\r\n  // author : Nick Payne\r\n  bootbox.addLocale('en', {\r\n    OK: 'OK',\r\n    CANCEL: 'Cancel',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : Spanish\r\n  // author : Ian Leckey\r\n  bootbox.addLocale('es', {\r\n    OK: 'OK',\r\n    CANCEL: 'Cancelar',\r\n    CONFIRM: 'Aceptar'\r\n  });\r\n  // locale : Estonian\r\n  // author : Pavel Kr\u00F5lov\r\n  bootbox.addLocale('et', {\r\n    OK: 'OK',\r\n    CANCEL: 'Katkesta',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : Basque\r\n  // author : Iker Ibarguren\r\n  bootbox.addLocale('eu', {\r\n    OK: 'OK',\r\n    CANCEL: 'Ezeztatu',\r\n    CONFIRM: 'Onartu'\r\n  });\r\n  // locale : Persian\r\n  // author : Touhid Arastu\r\n  bootbox.addLocale('fa', {\r\n    OK: '\u0642\u0628\u0648\u0644',\r\n    CANCEL: '\u0644\u063A\u0648',\r\n    CONFIRM: '\u062A\u0627\u06CC\u06CC\u062F'\r\n  });\r\n  // locale : Finnish\r\n  // author : Nick Payne\r\n  bootbox.addLocale('fi', {\r\n    OK: 'OK',\r\n    CANCEL: 'Peruuta',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : French\r\n  // author : Nick Payne, Sebastien Andary\r\n  bootbox.addLocale('fr', {\r\n    OK: 'OK',\r\n    CANCEL: 'Annuler',\r\n    CONFIRM: 'Confirmer'\r\n  });\r\n  // locale : Hebrew\r\n  // author : Chen Alon\r\n  bootbox.addLocale('he', {\r\n    OK: '\u05D0\u05D9\u05E9\u05D5\u05E8',\r\n    CANCEL: '\u05D1\u05D9\u05D8\u05D5\u05DC',\r\n    CONFIRM: '\u05D0\u05D9\u05E9\u05D5\u05E8'\r\n  });\r\n  // locale : Croatian\r\n  // author : Mario Ba\u0161i\u0107\r\n  bootbox.addLocale('hr', {\r\n    OK: 'OK',\r\n    CANCEL: 'Odustani',\r\n    CONFIRM: 'Potvrdi'\r\n  });\r\n  // locale : Hungarian\r\n  // author : M\u00E1rk S\u00E1gi-Kaz\u00E1r\r\n  bootbox.addLocale('hu', {\r\n    OK: 'OK',\r\n    CANCEL: 'M\u00E9gsem',\r\n    CONFIRM: 'Meger\u0151s\u00EDt'\r\n  });\r\n  // locale : Indonesian\r\n  // author : Budi Irawan\r\n  bootbox.addLocale('id', {\r\n    OK: 'OK',\r\n    CANCEL: 'Batal',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : Italian\r\n  // author : Mauro\r\n  bootbox.addLocale('it', {\r\n    OK: 'OK',\r\n    CANCEL: 'Annulla',\r\n    CONFIRM: 'Conferma'\r\n  });\r\n  // locale : Japanese\r\n  // author : ms183\r\n  bootbox.addLocale('ja', {\r\n    OK: 'OK',\r\n    CANCEL: '\u30AD\u30E3\u30F3\u30BB\u30EB',\r\n    CONFIRM: 'OK'\r\n  });\r\n\r\n  // locale : Georgian\r\n  // author : Avtandil Kikabidze aka LONGMAN (@akalongman)\r\n  bootbox.addLocale('ka', {\r\n    OK: 'OK',\r\n    CANCEL: '\u10D2\u10D0\u10E3\u10E5\u10DB\u10D4\u10D1\u10D0',\r\n    CONFIRM: '\u10D3\u10D0\u10D3\u10D0\u10E1\u10E2\u10E3\u10E0\u10D4\u10D1\u10D0'\r\n  });\r\n  // locale : Korean\r\n  // author : rigning\r\n  bootbox.addLocale('ko', {\r\n    OK: 'OK',\r\n    CANCEL: '\uCDE8\uC18C',\r\n    CONFIRM: '\uD655\uC778'\r\n  });\r\n  // locale : Lithuanian\r\n  // author : Tomas\r\n  bootbox.addLocale('lt', {\r\n    OK: 'Gerai',\r\n    CANCEL: 'At\u0161aukti',\r\n    CONFIRM: 'Patvirtinti'\r\n  });\r\n  // locale : Latvian\r\n  // author : Dmitry Bogatykh, Lauris BH\r\n  bootbox.addLocale('lv', {\r\n    OK: 'Labi',\r\n    CANCEL: 'Atcelt',\r\n    CONFIRM: 'Apstiprin\u0101t'\r\n  });\r\n  // locale : Dutch\r\n  // author : Bas ter Vrugt\r\n  bootbox.addLocale('nl', {\r\n    OK: 'OK',\r\n    CANCEL: 'Annuleren',\r\n    CONFIRM: 'Accepteren'\r\n  });\r\n  // locale : Norwegian\r\n  // author : Nils Magnus Englund\r\n  bootbox.addLocale('no', {\r\n    OK: 'OK',\r\n    CANCEL: 'Avbryt',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : Polish\r\n  // author : Szczepan Cie\u015Blik\r\n  bootbox.addLocale('pl', {\r\n    OK: 'OK',\r\n    CANCEL: 'Anuluj',\r\n    CONFIRM: 'Potwierd\u017A'\r\n  });\r\n  // locale : Portuguese (Brasil)\r\n  // author : Nick Payne\r\n  bootbox.addLocale('pt-BR', {\r\n    OK: 'OK',\r\n    CANCEL: 'Cancelar',\r\n    CONFIRM: 'Sim'\r\n  });\r\n  // locale : Portuguese\r\n  // author : Cl\u00E1udio Medina\r\n  bootbox.addLocale('pt', {\r\n    OK: 'OK',\r\n    CANCEL: 'Cancelar',\r\n    CONFIRM: 'Confirmar'\r\n  });\r\n  // locale : Russian\r\n  // author : ionian-wind\r\n  bootbox.addLocale('ru', {\r\n    OK: 'OK',\r\n    CANCEL: '\u041E\u0442\u043C\u0435\u043D\u0430',\r\n    CONFIRM: '\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C'\r\n  });\r\n  // locale : Slovak\r\n  // author : Stano Pa\u0161ka\r\n  bootbox.addLocale('sk', {\r\n    OK: 'OK',\r\n    CANCEL: 'Zru\u0161i\u0165',\r\n    CONFIRM: 'Potvrdi\u0165'\r\n  });\r\n  // locale : Slovenian\r\n  // author : @metalcamp\r\n  bootbox.addLocale('sl', {\r\n    OK: 'OK',\r\n    CANCEL: 'Prekli\u010Di',\r\n    CONFIRM: 'Potrdi'\r\n  });\r\n  // locale : Albanian\r\n  // author : Knut H\u00FChne\r\n  bootbox.addLocale('sq', {\r\n    OK: 'OK',\r\n    CANCEL: 'Anulo',\r\n    CONFIRM: 'Prano'\r\n  });\r\n  // locale : Swedish\r\n  // author : Mattias Reichel\r\n  bootbox.addLocale('sv', {\r\n    OK: 'OK',\r\n    CANCEL: 'Avbryt',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : Swahili\r\n  // author : Timothy Anyona\r\n  bootbox.addLocale('sw', {\r\n    OK: 'Sawa',\r\n    CANCEL: 'Ghairi',\r\n    CONFIRM: 'Thibitisha'\r\n  });\r\n  // locale : Tamil\r\n  // author : Kolappan Nathan\r\n  bootbox.addLocale('ta', {\r\n    OK: '\u0B9A\u0BB0\u0BBF',\r\n    CANCEL: '\u0BB0\u0BA4\u0BCD\u0BA4\u0BC1 \u0B9A\u0BC6\u0BAF\u0BCD',\r\n    CONFIRM: '\u0B89\u0BB1\u0BC1\u0BA4\u0BBF \u0B9A\u0BC6\u0BAF\u0BCD'\r\n  });\r\n  // locale : Thai\r\n  // author : Ishmael\u0E5B\r\n  bootbox.addLocale('th', {\r\n    OK: '\u0E15\u0E01\u0E25\u0E07',\r\n    CANCEL: '\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01',\r\n    CONFIRM: '\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19'\r\n  });\r\n  // locale : Turkish\r\n  // author : Enes Karaca\r\n  bootbox.addLocale('tr', {\r\n    OK: 'Tamam',\r\n    CANCEL: '\u0130ptal',\r\n    CONFIRM: 'Onayla'\r\n  });\r\n  // locale : Ukrainian\r\n  // author : OlehBoiko\r\n  bootbox.addLocale('uk', {\r\n    OK: 'OK',\r\n    CANCEL: '\u0412\u0456\u0434\u043C\u0456\u043D\u0430',\r\n    CONFIRM: '\u041F\u0440\u0438\u0439\u043D\u044F\u0442\u0438'\r\n  });\r\n  // locale : Vietnamese\r\n  // author :  Anh Tu Nguyen\r\n  bootbox.addLocale('vi', {\r\n    OK: 'OK',\r\n    CANCEL: 'H\u1EE7y b\u1ECF',\r\n    CONFIRM: 'X\u00E1c nh\u1EADn'\r\n  });\r\n  // locale : Chinese (China / People's Republic of China)\r\n  // author : Nick Payne\r\n  bootbox.addLocale('zh-CN', {\r\n    OK: 'OK',\r\n    CANCEL: '\u53D6\u6D88',\r\n    CONFIRM: '\u786E\u8BA4'\r\n  });\r\n  // locale : Chinese (Taiwan / Republic of China)\r\n  // author : Nick Payne\r\n  bootbox.addLocale('zh-TW', {\r\n    OK: 'OK',\r\n    CANCEL: '\u53D6\u6D88',\r\n    CONFIRM: '\u78BA\u8A8D'\r\n  });\r\n\r\n}));\r\n", "const bootbox = require('bootbox');\nrequire('bootbox/dist/bootbox.locales');\n\nbootbox.setDefaults({\n    /**\n     * @optional String\n     * @default: en\n     * which locale settings to use to translate the three\n     * standard button labels: OK, CONFIRM, CANCEL\n     */\n    locale: \"de\",\n\n    /**\n     * @optional Boolean\n     * @default: true\n     * whether the dialog should be shown immediately\n     */\n    show: true,\n\n    /**\n     * @optional Boolean\n     * @default: true\n     * whether the dialog should be have a backdrop or not\n     */\n    backdrop: true,\n\n    /**\n     * @optional Boolean\n     * @default: true\n     * show a close button\n     */\n    closeButton: true,\n\n    /**\n     * @optional Boolean\n     * @default: true\n     * animate the dialog in and out (not supported in < IE 10)\n     */\n    animate: false,\n\n    /**\n     * @optional String\n     * @default: null\n     * an additional class to apply to the dialog wrapper\n     */\n    className: \"bootbox-modal\"\n\n});\n\nexport { bootbox };\n", "@-webkit-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%,70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-moz-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%,70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%,70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-webkit-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-moz-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-moz-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{min-height:150px;border:2px solid rgba(0,0,0,.3);background:#fff;padding:20px 20px}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message *{cursor:pointer}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:.5}.dropzone .dz-message{text-align:center;margin:2em 0}.dropzone .dz-message .dz-button{background:none;color:inherit;border:none;padding:0;font:inherit;cursor:pointer;outline:inherit}.dropzone .dz-preview{position:relative;display:inline-block;vertical-align:top;margin:16px;min-height:100px}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview.dz-file-preview .dz-image{border-radius:20px;background:#999;background:linear-gradient(to bottom, #eee, #ddd)}.dropzone .dz-preview.dz-file-preview .dz-details{opacity:1}.dropzone .dz-preview.dz-image-preview{background:#fff}.dropzone .dz-preview.dz-image-preview .dz-details{-webkit-transition:opacity 0.2s linear;-moz-transition:opacity 0.2s linear;-ms-transition:opacity 0.2s linear;-o-transition:opacity 0.2s linear;transition:opacity 0.2s linear}.dropzone .dz-preview .dz-remove{font-size:14px;text-align:center;display:block;cursor:pointer;border:none}.dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview .dz-details{z-index:20;position:absolute;top:0;left:0;opacity:0;font-size:13px;min-width:100%;max-width:100%;padding:2em 1em;text-align:center;color:rgba(0,0,0,.9);line-height:150%}.dropzone .dz-preview .dz-details .dz-size{margin-bottom:1em;font-size:16px}.dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid rgba(200,200,200,.8);background-color:rgba(255,255,255,.8)}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-details .dz-filename span,.dropzone .dz-preview .dz-details .dz-size span{background-color:rgba(255,255,255,.4);padding:0 .4em;border-radius:3px}.dropzone .dz-preview:hover .dz-image img{-webkit-transform:scale(1.05, 1.05);-moz-transform:scale(1.05, 1.05);-ms-transform:scale(1.05, 1.05);-o-transform:scale(1.05, 1.05);transform:scale(1.05, 1.05);-webkit-filter:blur(8px);filter:blur(8px)}.dropzone .dz-preview .dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dropzone .dz-preview .dz-image img{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{-webkit-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;-webkit-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;opacity:0;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}.dropzone .dz-preview .dz-success-mark svg,.dropzone .dz-preview .dz-error-mark svg{display:block;width:54px;height:54px}.dropzone .dz-preview.dz-processing .dz-progress{opacity:1;-webkit-transition:all 0.2s linear;-moz-transition:all 0.2s linear;-ms-transition:all 0.2s linear;-o-transition:all 0.2s linear;transition:all 0.2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;-webkit-transition:opacity 0.4s ease-in;-moz-transition:opacity 0.4s ease-in;-ms-transition:opacity 0.4s ease-in;-o-transition:opacity 0.4s ease-in;transition:opacity 0.4s ease-in}.dropzone .dz-preview:not(.dz-processing) .dz-progress{-webkit-animation:pulse 6s ease infinite;-moz-animation:pulse 6s ease infinite;-ms-animation:pulse 6s ease infinite;-o-animation:pulse 6s ease infinite;animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{opacity:1;z-index:1000;pointer-events:none;position:absolute;height:16px;left:50%;top:50%;margin-top:-8px;width:80px;margin-left:-40px;background:rgba(255,255,255,.9);-webkit-transform:scale(1);border-radius:8px;overflow:hidden}.dropzone .dz-preview .dz-progress .dz-upload{background:#333;background:linear-gradient(to bottom, #666, #444);position:absolute;top:0;left:0;bottom:0;width:0;-webkit-transition:width 300ms ease-in-out;-moz-transition:width 300ms ease-in-out;-ms-transition:width 300ms ease-in-out;-o-transition:width 300ms ease-in-out;transition:width 300ms ease-in-out}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview .dz-error-message{pointer-events:none;z-index:1000;position:absolute;display:block;display:none;opacity:0;-webkit-transition:opacity 0.3s ease;-moz-transition:opacity 0.3s ease;-ms-transition:opacity 0.3s ease;-o-transition:opacity 0.3s ease;transition:opacity 0.3s ease;border-radius:8px;font-size:13px;top:130px;left:-10px;width:140px;background:#be2626;background:linear-gradient(to bottom, #be2626, #a92222);padding:.5em 1.2em;color:#fff}.dropzone .dz-preview .dz-error-message:after{content:\"\";position:absolute;top:-6px;left:64px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #be2626}", ".dropzone,.dropzone *{box-sizing:border-box}.dropzone{position:relative}.dropzone .dz-preview{position:relative;display:inline-block;width:120px;margin:.5em}.dropzone .dz-preview .dz-progress{display:block;height:15px;border:1px solid #aaa}.dropzone .dz-preview .dz-progress .dz-upload{display:block;height:100%;width:0;background:green}.dropzone .dz-preview .dz-error-message{color:red;display:none}.dropzone .dz-preview.dz-error .dz-error-message,.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{position:absolute;display:none;left:30px;top:30px;width:54px;height:58px;left:50%;margin-left:-27px}", "body .dropzone {\n  min-height: 130px;\n  border: 2px dashed rgba(0, 0, 0, 0.3);\n  padding: 5px 5px;\n}\nbody .dropzone .dz-message {\n  margin-top: 20px;\n  margin-bottom: 20px;\n}\nbody .dropzone .dz-preview {\n  width: 100px;\n}\nbody .dropzone .dz-preview .dz-image {\n  width: 100px;\n  height: 100px;\n  border-radius: 10px;\n  border: solid thin lightgray;\n  opacity: 90%;\n}\nbody .dropzone .dz-preview .dz-details {\n  padding-top: 15px;\n  padding-left: 7px;\n  padding-right: 7px;\n}\nbody .dropzone .dz-preview .dz-details .dz-size {\n  margin-bottom: 5px;\n}\nbody .dropzone .dz-preview .dz-details:not(:hover) a {\n  visibility: hidden;\n  opacity: 0;\n  transition: visibility 0s linear 300ms, opacity 300ms;\n}\nbody .dropzone .dz-preview .dz-buttons a:not(:first-child) {\n  margin-left: 10px;\n}\nbody .dropzone .dz-preview .dz-buttons {\n  margin-top: 6px;\n}\nbody .dropzone .dz-preview .dz-buttons a {\n  font-size: x-large;\n  filter: drop-shadow(0 0 4px white);\n}\nbody .dropzone .dz-preview .dz-error-mark {\n  filter: invert(50%) sepia(100%) saturate(2000%) hue-rotate(-25deg) brightness(93%) drop-shadow(8px 8px 10px white);\n}\nbody .dropzone .dz-preview .dz-error-message, body .dropzone .dz-preview .dz-error-mark, body .dropzone .dz-preview .dz-success-mark {\n  top: 45%;\n}\nbody .dropzone .dz-preview .dz-error-message {\n  color: white;\n}\nbody .dropzone .dz-preview .dz-success-mark {\n  filter: drop-shadow(8px 8px 10px #00a65a);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUva3Vyc28vYXBwcy9rdXJzby9yZWxlYXNlcy8yMDI2MDkzMDEyNDk1My9hcHAvamF2YXNjcmlwdC9jb21wb25lbnRzL2Ryb3B6b25lIiwic291cmNlcyI6WyJkcm9wem9uZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTs7QUFHRjtFQUVFOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFDQTtFQUNFOztBQUlKO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFDQTtFQUNFO0VBQ0E7O0FBSUo7RUFDRTs7QUFFRjtFQUNFOztBQUVGO0VBQ0U7O0FBRUY7RUFDRSIsInNvdXJjZXNDb250ZW50IjpbImJvZHkgLmRyb3B6b25lIHtcbiAgbWluLWhlaWdodDogMTMwcHg7XG4gIGJvcmRlcjogMnB4IGRhc2hlZCByZ2JhKDAsMCwwLC4zKTtcbiAgcGFkZGluZzogNXB4IDVweDtcblxuICAuZHotbWVzc2FnZSB7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICB9XG5cbiAgLmR6LXByZXZpZXcge1xuXG4gICAgd2lkdGg6IDEwMHB4O1xuXG4gICAgLmR6LWltYWdlIHtcbiAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgIGhlaWdodDogMTAwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgYm9yZGVyOiBzb2xpZCB0aGluIGxpZ2h0Z3JheTtcbiAgICAgIG9wYWNpdHk6IDkwJTtcbiAgICB9XG5cbiAgICAuZHotZGV0YWlscyB7XG4gICAgICBwYWRkaW5nLXRvcDogMTVweDtcbiAgICAgIHBhZGRpbmctbGVmdDogN3B4O1xuICAgICAgcGFkZGluZy1yaWdodDogN3B4O1xuICAgICAgLmR6LXNpemUge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmR6LWRldGFpbHM6bm90KDpob3ZlcikgYSB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMzAwbXMsIG9wYWNpdHkgMzAwbXM7XG4gICAgfVxuXG4gICAgLmR6LWJ1dHRvbnMgYTpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICB9XG5cbiAgICAuZHotYnV0dG9ucyB7XG4gICAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgICBhIHtcbiAgICAgICAgZm9udC1zaXplOiB4LWxhcmdlO1xuICAgICAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCA0cHggd2hpdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5kei1lcnJvci1tYXJrIHtcbiAgICAgIGZpbHRlcjogaW52ZXJ0KDUwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMjAwMCUpIGh1ZS1yb3RhdGUoLTI1ZGVnKSBicmlnaHRuZXNzKDkzJSkgZHJvcC1zaGFkb3coOHB4IDhweCAxMHB4IHdoaXRlKTtcbiAgICB9XG4gICAgLmR6LWVycm9yLW1lc3NhZ2UsIC5kei1lcnJvci1tYXJrLCAuZHotc3VjY2Vzcy1tYXJrIHtcbiAgICAgIHRvcDogNDUlO1xuICAgIH1cbiAgICAuZHotZXJyb3ItbWVzc2FnZSB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICAgIC5kei1zdWNjZXNzLW1hcmsge1xuICAgICAgZmlsdGVyOmRyb3Atc2hhZG93KDhweCA4cHggMTBweCAjMDBhNjVhKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cbiJdfQ== */", "import { Dropzone } from 'dropzone';\nDropzone.autoDiscover = false;\n\n// Dropzone.options\nimport(\"dropzone/dist/min/dropzone.min.css\");\nimport(\"dropzone/dist/min/basic.min.css\");\n\nimport('./dropzone.scss')\n", ".vis .overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n\n  /* Must be displayed above for example selected Timeline items */\n  z-index: 10;\n}\n\n.vis-active {\n  box-shadow: 0 0 10px #86d5f8;\n}\n\n/* override some bootstrap styles screwing up the timelines css */\n\n.vis [class*=\"span\"] {\n  min-height: 0;\n  width: auto;\n}\n\ndiv.vis-configuration {\n  position: relative;\n  display: block;\n  float: left;\n  font-size: 12px;\n}\n\ndiv.vis-configuration-wrapper {\n  display: block;\n  width: 700px;\n}\n\ndiv.vis-configuration-wrapper::after {\n  clear: both;\n  content: \"\";\n  display: block;\n}\n\ndiv.vis-configuration.vis-config-option-container {\n  display: block;\n  width: 495px;\n  background-color: #ffffff;\n  border: 2px solid #f7f8fa;\n  border-radius: 4px;\n  margin-top: 20px;\n  left: 10px;\n  padding-left: 5px;\n}\n\ndiv.vis-configuration.vis-config-button {\n  display: block;\n  width: 495px;\n  height: 25px;\n  vertical-align: middle;\n  line-height: 25px;\n  background-color: #f7f8fa;\n  border: 2px solid #ceced0;\n  border-radius: 4px;\n  margin-top: 20px;\n  left: 10px;\n  padding-left: 5px;\n  cursor: pointer;\n  margin-bottom: 30px;\n}\n\ndiv.vis-configuration.vis-config-button.hover {\n  background-color: #4588e6;\n  border: 2px solid #214373;\n  color: #ffffff;\n}\n\ndiv.vis-configuration.vis-config-item {\n  display: block;\n  float: left;\n  width: 495px;\n  height: 25px;\n  vertical-align: middle;\n  line-height: 25px;\n}\n\ndiv.vis-configuration.vis-config-item.vis-config-s2 {\n  left: 10px;\n  background-color: #f7f8fa;\n  padding-left: 5px;\n  border-radius: 3px;\n}\ndiv.vis-configuration.vis-config-item.vis-config-s3 {\n  left: 20px;\n  background-color: #e4e9f0;\n  padding-left: 5px;\n  border-radius: 3px;\n}\ndiv.vis-configuration.vis-config-item.vis-config-s4 {\n  left: 30px;\n  background-color: #cfd8e6;\n  padding-left: 5px;\n  border-radius: 3px;\n}\n\ndiv.vis-configuration.vis-config-header {\n  font-size: 18px;\n  font-weight: bold;\n}\n\ndiv.vis-configuration.vis-config-label {\n  width: 120px;\n  height: 25px;\n  line-height: 25px;\n}\n\ndiv.vis-configuration.vis-config-label.vis-config-s3 {\n  width: 110px;\n}\ndiv.vis-configuration.vis-config-label.vis-config-s4 {\n  width: 100px;\n}\n\ndiv.vis-configuration.vis-config-colorBlock {\n  top: 1px;\n  width: 30px;\n  height: 19px;\n  border: 1px solid #444444;\n  border-radius: 2px;\n  padding: 0px;\n  margin: 0px;\n  cursor: pointer;\n}\n\ninput.vis-configuration.vis-config-checkbox {\n  left: -5px;\n}\n\ninput.vis-configuration.vis-config-rangeinput {\n  position: relative;\n  top: -5px;\n  width: 60px;\n  /*height:13px;*/\n  padding: 1px;\n  margin: 0;\n  pointer-events: none;\n}\n\ninput.vis-configuration.vis-config-range {\n  /*removes default webkit styles*/\n  -webkit-appearance: none;\n\n  /*fix for FF unable to apply focus style bug */\n  border: 0px solid white;\n  background-color: rgba(0, 0, 0, 0);\n\n  /*required for proper track sizing in FF*/\n  width: 300px;\n  height: 20px;\n}\ninput.vis-configuration.vis-config-range::-webkit-slider-runnable-track {\n  width: 300px;\n  height: 5px;\n  background: #dedede; /* Old browsers */\n  background: -moz-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* FF3.6+ */\n  background: -webkit-gradient(\n    linear,\n    left top,\n    left bottom,\n    color-stop(0%, #dedede),\n    color-stop(99%, #c8c8c8)\n  ); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(\n    top,\n    #dedede 0%,\n    #c8c8c8 99%\n  ); /* Chrome10+,Safari5.1+ */\n  background: -o-linear-gradient(\n    top,\n    #dedede 0%,\n    #c8c8c8 99%\n  ); /* Opera 11.10+ */\n  background: -ms-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* IE10+ */\n  background: linear-gradient(to bottom, #dedede 0%, #c8c8c8 99%); /* W3C */\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */\n\n  border: 1px solid #999999;\n  box-shadow: #aaaaaa 0px 0px 3px 0px;\n  border-radius: 3px;\n}\ninput.vis-configuration.vis-config-range::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  border: 1px solid #14334b;\n  height: 17px;\n  width: 17px;\n  border-radius: 50%;\n  background: #3876c2; /* Old browsers */\n  background: -moz-linear-gradient(top, #3876c2 0%, #385380 100%); /* FF3.6+ */\n  background: -webkit-gradient(\n    linear,\n    left top,\n    left bottom,\n    color-stop(0%, #3876c2),\n    color-stop(100%, #385380)\n  ); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(\n    top,\n    #3876c2 0%,\n    #385380 100%\n  ); /* Chrome10+,Safari5.1+ */\n  background: -o-linear-gradient(\n    top,\n    #3876c2 0%,\n    #385380 100%\n  ); /* Opera 11.10+ */\n  background: -ms-linear-gradient(top, #3876c2 0%, #385380 100%); /* IE10+ */\n  background: linear-gradient(to bottom, #3876c2 0%, #385380 100%); /* W3C */\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3876c2', endColorstr='#385380',GradientType=0 ); /* IE6-9 */\n  box-shadow: #111927 0px 0px 1px 0px;\n  margin-top: -7px;\n}\ninput.vis-configuration.vis-config-range:focus {\n  outline: none;\n}\ninput.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track {\n  background: #9d9d9d; /* Old browsers */\n  background: -moz-linear-gradient(top, #9d9d9d 0%, #c8c8c8 99%); /* FF3.6+ */\n  background: -webkit-gradient(\n    linear,\n    left top,\n    left bottom,\n    color-stop(0%, #9d9d9d),\n    color-stop(99%, #c8c8c8)\n  ); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(\n    top,\n    #9d9d9d 0%,\n    #c8c8c8 99%\n  ); /* Chrome10+,Safari5.1+ */\n  background: -o-linear-gradient(\n    top,\n    #9d9d9d 0%,\n    #c8c8c8 99%\n  ); /* Opera 11.10+ */\n  background: -ms-linear-gradient(top, #9d9d9d 0%, #c8c8c8 99%); /* IE10+ */\n  background: linear-gradient(to bottom, #9d9d9d 0%, #c8c8c8 99%); /* W3C */\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9d9d9d', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */\n}\n\ninput.vis-configuration.vis-config-range::-moz-range-track {\n  width: 300px;\n  height: 10px;\n  background: #dedede; /* Old browsers */\n  background: -moz-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* FF3.6+ */\n  background: -webkit-gradient(\n    linear,\n    left top,\n    left bottom,\n    color-stop(0%, #dedede),\n    color-stop(99%, #c8c8c8)\n  ); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(\n    top,\n    #dedede 0%,\n    #c8c8c8 99%\n  ); /* Chrome10+,Safari5.1+ */\n  background: -o-linear-gradient(\n    top,\n    #dedede 0%,\n    #c8c8c8 99%\n  ); /* Opera 11.10+ */\n  background: -ms-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* IE10+ */\n  background: linear-gradient(to bottom, #dedede 0%, #c8c8c8 99%); /* W3C */\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */\n\n  border: 1px solid #999999;\n  box-shadow: #aaaaaa 0px 0px 3px 0px;\n  border-radius: 3px;\n}\ninput.vis-configuration.vis-config-range::-moz-range-thumb {\n  border: none;\n  height: 16px;\n  width: 16px;\n\n  border-radius: 50%;\n  background: #385380;\n}\n\n/*hide the outline behind the border*/\ninput.vis-configuration.vis-config-range:-moz-focusring {\n  outline: 1px solid white;\n  outline-offset: -1px;\n}\n\ninput.vis-configuration.vis-config-range::-ms-track {\n  width: 300px;\n  height: 5px;\n\n  /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */\n  background: transparent;\n\n  /*leave room for the larger thumb to overflow with a transparent border */\n  border-color: transparent;\n  border-width: 6px 0;\n\n  /*remove default tick marks*/\n  color: transparent;\n}\ninput.vis-configuration.vis-config-range::-ms-fill-lower {\n  background: #777;\n  border-radius: 10px;\n}\ninput.vis-configuration.vis-config-range::-ms-fill-upper {\n  background: #ddd;\n  border-radius: 10px;\n}\ninput.vis-configuration.vis-config-range::-ms-thumb {\n  border: none;\n  height: 16px;\n  width: 16px;\n  border-radius: 50%;\n  background: #385380;\n}\ninput.vis-configuration.vis-config-range:focus::-ms-fill-lower {\n  background: #888;\n}\ninput.vis-configuration.vis-config-range:focus::-ms-fill-upper {\n  background: #ccc;\n}\n\n.vis-configuration-popup {\n  position: absolute;\n  background: rgba(57, 76, 89, 0.85);\n  border: 2px solid #f2faff;\n  line-height: 30px;\n  height: 30px;\n  width: 150px;\n  text-align: center;\n  color: #ffffff;\n  font-size: 14px;\n  border-radius: 4px;\n  -webkit-transition: opacity 0.3s ease-in-out;\n  -moz-transition: opacity 0.3s ease-in-out;\n  transition: opacity 0.3s ease-in-out;\n}\n.vis-configuration-popup:after,\n.vis-configuration-popup:before {\n  left: 100%;\n  top: 50%;\n  border: solid transparent;\n  content: \" \";\n  height: 0;\n  width: 0;\n  position: absolute;\n  pointer-events: none;\n}\n\n.vis-configuration-popup:after {\n  border-color: rgba(136, 183, 213, 0);\n  border-left-color: rgba(57, 76, 89, 0.85);\n  border-width: 8px;\n  margin-top: -8px;\n}\n.vis-configuration-popup:before {\n  border-color: rgba(194, 225, 245, 0);\n  border-left-color: #f2faff;\n  border-width: 12px;\n  margin-top: -12px;\n}\n\ndiv.vis-tooltip {\n  position: absolute;\n  visibility: hidden;\n  padding: 5px;\n  white-space: nowrap;\n\n  font-family: verdana;\n  font-size: 14px;\n  color: #000000;\n  background-color: #f5f4ed;\n\n  -moz-border-radius: 3px;\n  -webkit-border-radius: 3px;\n  border-radius: 3px;\n  border: 1px solid #808074;\n\n  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2);\n  pointer-events: none;\n\n  z-index: 5;\n}\n\n.vis-timeline {\n  /*\n  -webkit-transition: height .4s ease-in-out;\n  transition:         height .4s ease-in-out;\n  */\n}\n\n.vis-panel {\n  /*\n  -webkit-transition: height .4s ease-in-out, top .4s ease-in-out;\n  transition:         height .4s ease-in-out, top .4s ease-in-out;\n  */\n}\n\n.vis-axis {\n  /*\n  -webkit-transition: top .4s ease-in-out;\n  transition:         top .4s ease-in-out;\n  */\n}\n\n/* TODO: get animation working nicely\n\n.vis-item {\n  -webkit-transition: top .4s ease-in-out;\n  transition:         top .4s ease-in-out;\n}\n\n.vis-item.line {\n  -webkit-transition: height .4s ease-in-out, top .4s ease-in-out;\n  transition:         height .4s ease-in-out, top .4s ease-in-out;\n}\n/**/\n\n.vis-current-time {\n  background-color: #ff7f6e;\n  width: 2px;\n  z-index: 1;\n  pointer-events: none;\n}\n\n.vis-rolling-mode-btn {\n  height: 40px;\n  width: 40px;\n  position: absolute;\n  top: 7px;\n  right: 20px;\n  border-radius: 50%;\n  font-size: 28px;\n  cursor: pointer;\n  opacity: 0.8;\n  color: white;\n  font-weight: bold;\n  text-align: center;\n  background: #3876c2;\n}\n.vis-rolling-mode-btn:before {\n  content: \"\\26F6\";\n}\n\n.vis-rolling-mode-btn:hover {\n  opacity: 1;\n}\n\n.vis-custom-time {\n  background-color: #6e94ff;\n  width: 2px;\n  cursor: move;\n  z-index: 1;\n}\n\n.vis-custom-time > .vis-custom-time-marker {\n  background-color: inherit;\n  color: white;\n  font-size: 12px;\n  white-space: nowrap;\n  padding: 3px 5px;\n  top: 0px;\n  cursor: initial;\n  z-index: inherit;\n}\n\n.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal {\n  position: absolute;\n  width: 100%;\n  height: 0;\n  border-bottom: 1px solid;\n}\n\n.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor {\n  border-color: #e5e5e5;\n}\n\n.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major {\n  border-color: #bfbfbf;\n}\n\n.vis-data-axis .vis-y-axis.vis-major {\n  width: 100%;\n  position: absolute;\n  color: #4d4d4d;\n  white-space: nowrap;\n}\n\n.vis-data-axis .vis-y-axis.vis-major.vis-measure {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  visibility: hidden;\n  width: auto;\n}\n\n.vis-data-axis .vis-y-axis.vis-minor {\n  position: absolute;\n  width: 100%;\n  color: #bebebe;\n  white-space: nowrap;\n}\n\n.vis-data-axis .vis-y-axis.vis-minor.vis-measure {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  visibility: hidden;\n  width: auto;\n}\n\n.vis-data-axis .vis-y-axis.vis-title {\n  position: absolute;\n  color: #4d4d4d;\n  white-space: nowrap;\n  bottom: 20px;\n  text-align: center;\n}\n\n.vis-data-axis .vis-y-axis.vis-title.vis-measure {\n  padding: 0;\n  margin: 0;\n  visibility: hidden;\n  width: auto;\n}\n\n.vis-data-axis .vis-y-axis.vis-title.vis-left {\n  bottom: 0;\n  -webkit-transform-origin: left top;\n  -moz-transform-origin: left top;\n  -ms-transform-origin: left top;\n  -o-transform-origin: left top;\n  transform-origin: left bottom;\n  -webkit-transform: rotate(-90deg);\n  -moz-transform: rotate(-90deg);\n  -ms-transform: rotate(-90deg);\n  -o-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n\n.vis-data-axis .vis-y-axis.vis-title.vis-right {\n  bottom: 0;\n  -webkit-transform-origin: right bottom;\n  -moz-transform-origin: right bottom;\n  -ms-transform-origin: right bottom;\n  -o-transform-origin: right bottom;\n  transform-origin: right bottom;\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\n.vis-legend {\n  background-color: rgba(247, 252, 255, 0.65);\n  padding: 5px;\n  border: 1px solid #b3b3b3;\n  box-shadow: 2px 2px 10px rgba(154, 154, 154, 0.55);\n}\n\n.vis-legend-text {\n  /*font-size: 10px;*/\n  white-space: nowrap;\n  display: inline-block;\n}\n\n.vis-item {\n  position: absolute;\n  color: #1a1a1a;\n  border-color: #97b0f8;\n  border-width: 1px;\n  background-color: #d5ddf6;\n  display: inline-block;\n  z-index: 1;\n  /*overflow: hidden;*/\n}\n\n.vis-item.vis-selected {\n  border-color: #ffc200;\n  background-color: #fff785;\n\n  /* z-index must be higher than the z-index of custom time bar and current time bar */\n  z-index: 2;\n}\n\n.vis-editable.vis-selected {\n  cursor: move;\n}\n\n.vis-item.vis-point.vis-selected {\n  background-color: #fff785;\n}\n\n.vis-item.vis-box {\n  text-align: center;\n  border-style: solid;\n  border-radius: 2px;\n}\n\n.vis-item.vis-point {\n  background: none;\n}\n\n.vis-item.vis-dot {\n  position: absolute;\n  padding: 0;\n  border-width: 4px;\n  border-style: solid;\n  border-radius: 4px;\n}\n\n.vis-item.vis-range {\n  border-style: solid;\n  border-radius: 2px;\n  box-sizing: border-box;\n}\n\n.vis-item.vis-background {\n  border: none;\n  background-color: rgba(213, 221, 246, 0.4);\n  box-sizing: border-box;\n  padding: 0;\n  margin: 0;\n}\n\n.vis-item .vis-item-overflow {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  margin: 0;\n  overflow: hidden;\n}\n\n.vis-item-visible-frame {\n  white-space: nowrap;\n}\n\n.vis-item.vis-range .vis-item-content {\n  position: relative;\n  display: inline-block;\n}\n\n.vis-item.vis-background .vis-item-content {\n  position: absolute;\n  display: inline-block;\n}\n\n.vis-item.vis-line {\n  padding: 0;\n  position: absolute;\n  width: 0;\n  border-left-width: 1px;\n  border-left-style: solid;\n}\n\n.vis-item .vis-item-content {\n  white-space: nowrap;\n  box-sizing: border-box;\n  padding: 5px;\n}\n\n.vis-item .vis-onUpdateTime-tooltip {\n  position: absolute;\n  background: #4f81bd;\n  color: white;\n  width: 200px;\n  text-align: center;\n  white-space: nowrap;\n  padding: 5px;\n  border-radius: 1px;\n  transition: 0.4s;\n  -o-transition: 0.4s;\n  -moz-transition: 0.4s;\n  -webkit-transition: 0.4s;\n}\n\n.vis-item .vis-delete,\n.vis-item .vis-delete-rtl {\n  position: absolute;\n  top: 0px;\n  width: 24px;\n  height: 24px;\n  box-sizing: border-box;\n  padding: 0px 5px;\n  cursor: pointer;\n\n  -webkit-transition: background 0.2s linear;\n  -moz-transition: background 0.2s linear;\n  -ms-transition: background 0.2s linear;\n  -o-transition: background 0.2s linear;\n  transition: background 0.2s linear;\n}\n\n.vis-item .vis-delete {\n  right: -24px;\n}\n\n.vis-item .vis-delete-rtl {\n  left: -24px;\n}\n\n.vis-item .vis-delete:after,\n.vis-item .vis-delete-rtl:after {\n  content: \"\\00D7\"; /* MULTIPLICATION SIGN */\n  color: red;\n  font-family: arial, sans-serif;\n  font-size: 22px;\n  font-weight: bold;\n\n  -webkit-transition: color 0.2s linear;\n  -moz-transition: color 0.2s linear;\n  -ms-transition: color 0.2s linear;\n  -o-transition: color 0.2s linear;\n  transition: color 0.2s linear;\n}\n\n.vis-item .vis-delete:hover,\n.vis-item .vis-delete-rtl:hover {\n  background: red;\n}\n\n.vis-item .vis-delete:hover:after,\n.vis-item .vis-delete-rtl:hover:after {\n  color: white;\n}\n\n.vis-item .vis-drag-center {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0px;\n  cursor: move;\n}\n\n.vis-item.vis-range .vis-drag-left {\n  position: absolute;\n  width: 24px;\n  max-width: 20%;\n  min-width: 2px;\n  height: 100%;\n  top: 0;\n  left: -4px;\n\n  cursor: w-resize;\n}\n\n.vis-item.vis-range .vis-drag-right {\n  position: absolute;\n  width: 24px;\n  max-width: 20%;\n  min-width: 2px;\n  height: 100%;\n  top: 0;\n  right: -4px;\n\n  cursor: e-resize;\n}\n\n.vis-range.vis-item.vis-readonly .vis-drag-left,\n.vis-range.vis-item.vis-readonly .vis-drag-right {\n  cursor: auto;\n}\n\n.vis-item.vis-cluster {\n  vertical-align: center;\n  text-align: center;\n  border-style: solid;\n  border-radius: 2px;\n}\n\n.vis-item.vis-cluster-line {\n  padding: 0;\n  position: absolute;\n  width: 0;\n  border-left-width: 1px;\n  border-left-style: solid;\n}\n\n.vis-item.vis-cluster-dot {\n  position: absolute;\n  padding: 0;\n  border-width: 4px;\n  border-style: solid;\n  border-radius: 4px;\n}\n\n.vis-itemset {\n  position: relative;\n  padding: 0;\n  margin: 0;\n\n  box-sizing: border-box;\n}\n\n.vis-itemset .vis-background,\n.vis-itemset .vis-foreground {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  overflow: visible;\n}\n\n.vis-axis {\n  position: absolute;\n  width: 100%;\n  height: 0;\n  left: 0;\n  z-index: 1;\n}\n\n.vis-foreground .vis-group {\n  position: relative;\n  box-sizing: border-box;\n  border-bottom: 1px solid #bfbfbf;\n}\n\n.vis-foreground .vis-group:last-child {\n  border-bottom: none;\n}\n\n.vis-nesting-group {\n  cursor: pointer;\n}\n\n.vis-label.vis-nested-group.vis-group-level-unknown-but-gte1 {\n  background: #f5f5f5;\n}\n.vis-label.vis-nested-group.vis-group-level-0 {\n  background-color: #ffffff;\n}\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-0 .vis-inner {\n  padding-left: 0;\n}\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-0 .vis-inner {\n  padding-right: 0;\n}\n.vis-label.vis-nested-group.vis-group-level-1 {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-1 .vis-inner {\n  padding-left: 15px;\n}\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-1 .vis-inner {\n  padding-right: 15px;\n}\n.vis-label.vis-nested-group.vis-group-level-2 {\n  background-color: rgba(0, 0, 0, 0.1);\n}\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-2 .vis-inner {\n  padding-left: 30px;\n}\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-2 .vis-inner {\n  padding-right: 30px;\n}\n.vis-label.vis-nested-group.vis-group-level-3 {\n  background-color: rgba(0, 0, 0, 0.15);\n}\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-3 .vis-inner {\n  padding-left: 45px;\n}\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-3 .vis-inner {\n  padding-right: 45px;\n}\n.vis-label.vis-nested-group.vis-group-level-4 {\n  background-color: rgba(0, 0, 0, 0.2);\n}\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-4 .vis-inner {\n  padding-left: 60px;\n}\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-4 .vis-inner {\n  padding-right: 60px;\n}\n.vis-label.vis-nested-group.vis-group-level-5 {\n  background-color: rgba(0, 0, 0, 0.25);\n}\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-5 .vis-inner {\n  padding-left: 75px;\n}\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-5 .vis-inner {\n  padding-right: 75px;\n}\n.vis-label.vis-nested-group.vis-group-level-6 {\n  background-color: rgba(0, 0, 0, 0.3);\n}\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-6 .vis-inner {\n  padding-left: 90px;\n}\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-6 .vis-inner {\n  padding-right: 90px;\n}\n.vis-label.vis-nested-group.vis-group-level-7 {\n  background-color: rgba(0, 0, 0, 0.35);\n}\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-7 .vis-inner {\n  padding-left: 105px;\n}\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-7 .vis-inner {\n  padding-right: 105px;\n}\n.vis-label.vis-nested-group.vis-group-level-8 {\n  background-color: rgba(0, 0, 0, 0.4);\n}\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-8 .vis-inner {\n  padding-left: 120px;\n}\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-8 .vis-inner {\n  padding-right: 120px;\n}\n.vis-label.vis-nested-group.vis-group-level-9 {\n  background-color: rgba(0, 0, 0, 0.45);\n}\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-9 .vis-inner {\n  padding-left: 135px;\n}\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-9 .vis-inner {\n  padding-right: 135px;\n}\n/* default takes over beginning with level-10 (thats why we add .vis-nested-group\n  to the selectors above, to have higher specifity than these rules for the defaults) */\n.vis-label.vis-nested-group {\n  background-color: rgba(0, 0, 0, 0.5);\n}\n.vis-ltr .vis-label.vis-nested-group .vis-inner {\n  padding-left: 150px;\n}\n.vis-rtl .vis-label.vis-nested-group .vis-inner {\n  padding-right: 150px;\n}\n\n.vis-group-level-unknown-but-gte1 {\n  border: 1px solid red;\n}\n\n/* expanded/collapsed indicators */\n.vis-label.vis-nesting-group:before,\n.vis-label.vis-nesting-group:before {\n  display: inline-block;\n  width: 15px;\n}\n.vis-label.vis-nesting-group.expanded:before {\n  content: \"\\25BC\";\n}\n.vis-label.vis-nesting-group.collapsed:before {\n  content: \"\\25B6\";\n}\n.vis-rtl .vis-label.vis-nesting-group.collapsed:before {\n  content: \"\\25C0\";\n}\n/* compensate missing expanded/collapsed indicator, but only at levels > 0 */\n.vis-ltr .vis-label:not(.vis-nesting-group):not(.vis-group-level-0) {\n  padding-left: 15px;\n}\n.vis-rtl .vis-label:not(.vis-nesting-group):not(.vis-group-level-0) {\n  padding-right: 15px;\n}\n\n.vis-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 10;\n}\n\n.vis-labelset {\n  position: relative;\n\n  overflow: hidden;\n\n  box-sizing: border-box;\n}\n\n.vis-labelset .vis-label {\n  position: relative;\n  left: 0;\n  top: 0;\n  width: 100%;\n  color: #4d4d4d;\n\n  box-sizing: border-box;\n}\n\n.vis-labelset .vis-label {\n  border-bottom: 1px solid #bfbfbf;\n}\n\n.vis-labelset .vis-label.draggable {\n  cursor: pointer;\n}\n\n.vis-group-is-dragging {\n  background: rgba(0, 0, 0, 0.1);\n}\n\n.vis-labelset .vis-label:last-child {\n  border-bottom: none;\n}\n\n.vis-labelset .vis-label .vis-inner {\n  display: inline-block;\n  padding: 5px;\n}\n\n.vis-labelset .vis-label .vis-inner.vis-hidden {\n  padding: 0;\n}\n\n.vis-panel {\n  position: absolute;\n\n  padding: 0;\n  margin: 0;\n\n  box-sizing: border-box;\n}\n\n.vis-panel.vis-center,\n.vis-panel.vis-left,\n.vis-panel.vis-right,\n.vis-panel.vis-top,\n.vis-panel.vis-bottom {\n  border: 1px #bfbfbf;\n}\n\n.vis-panel.vis-center,\n.vis-panel.vis-left,\n.vis-panel.vis-right {\n  border-top-style: solid;\n  border-bottom-style: solid;\n  overflow: hidden;\n}\n\n.vis-left.vis-panel.vis-vertical-scroll,\n.vis-right.vis-panel.vis-vertical-scroll {\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: scroll;\n}\n\n.vis-left.vis-panel.vis-vertical-scroll {\n  direction: rtl;\n}\n\n.vis-left.vis-panel.vis-vertical-scroll .vis-content {\n  direction: ltr;\n}\n\n.vis-right.vis-panel.vis-vertical-scroll {\n  direction: ltr;\n}\n\n.vis-right.vis-panel.vis-vertical-scroll .vis-content {\n  direction: rtl;\n}\n\n.vis-panel.vis-center,\n.vis-panel.vis-top,\n.vis-panel.vis-bottom {\n  border-left-style: solid;\n  border-right-style: solid;\n}\n\n.vis-background {\n  overflow: hidden;\n}\n\n.vis-panel > .vis-content {\n  position: relative;\n}\n\n.vis-panel .vis-shadow {\n  position: absolute;\n  width: 100%;\n  height: 1px;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.8);\n  /* TODO: find a nice way to ensure vis-shadows are drawn on top of items\n  z-index: 1;\n  */\n}\n\n.vis-panel .vis-shadow.vis-top {\n  top: -1px;\n  left: 0;\n}\n\n.vis-panel .vis-shadow.vis-bottom {\n  bottom: -1px;\n  left: 0;\n}\n\n.vis-graph-group0 {\n  fill: #4f81bd;\n  fill-opacity: 0;\n  stroke-width: 2px;\n  stroke: #4f81bd;\n}\n\n.vis-graph-group1 {\n  fill: #f79646;\n  fill-opacity: 0;\n  stroke-width: 2px;\n  stroke: #f79646;\n}\n\n.vis-graph-group2 {\n  fill: #8c51cf;\n  fill-opacity: 0;\n  stroke-width: 2px;\n  stroke: #8c51cf;\n}\n\n.vis-graph-group3 {\n  fill: #75c841;\n  fill-opacity: 0;\n  stroke-width: 2px;\n  stroke: #75c841;\n}\n\n.vis-graph-group4 {\n  fill: #ff0100;\n  fill-opacity: 0;\n  stroke-width: 2px;\n  stroke: #ff0100;\n}\n\n.vis-graph-group5 {\n  fill: #37d8e6;\n  fill-opacity: 0;\n  stroke-width: 2px;\n  stroke: #37d8e6;\n}\n\n.vis-graph-group6 {\n  fill: #042662;\n  fill-opacity: 0;\n  stroke-width: 2px;\n  stroke: #042662;\n}\n\n.vis-graph-group7 {\n  fill: #00ff26;\n  fill-opacity: 0;\n  stroke-width: 2px;\n  stroke: #00ff26;\n}\n\n.vis-graph-group8 {\n  fill: #ff00ff;\n  fill-opacity: 0;\n  stroke-width: 2px;\n  stroke: #ff00ff;\n}\n\n.vis-graph-group9 {\n  fill: #8f3938;\n  fill-opacity: 0;\n  stroke-width: 2px;\n  stroke: #8f3938;\n}\n\n.vis-timeline .vis-fill {\n  fill-opacity: 0.1;\n  stroke: none;\n}\n\n.vis-timeline .vis-bar {\n  fill-opacity: 0.5;\n  stroke-width: 1px;\n}\n\n.vis-timeline .vis-point {\n  stroke-width: 2px;\n  fill-opacity: 1;\n}\n\n.vis-timeline .vis-legend-background {\n  stroke-width: 1px;\n  fill-opacity: 0.9;\n  fill: #ffffff;\n  stroke: #c2c2c2;\n}\n\n.vis-timeline .vis-outline {\n  stroke-width: 1px;\n  fill-opacity: 1;\n  fill: #ffffff;\n  stroke: #e5e5e5;\n}\n\n.vis-timeline .vis-icon-fill {\n  fill-opacity: 0.3;\n  stroke: none;\n}\n\n.vis-time-axis {\n  position: relative;\n  overflow: hidden;\n}\n\n.vis-time-axis.vis-foreground {\n  top: 0;\n  left: 0;\n  width: 100%;\n}\n\n.vis-time-axis.vis-background {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.vis-time-axis .vis-text {\n  position: absolute;\n  color: #4d4d4d;\n  padding: 3px;\n  overflow: hidden;\n  box-sizing: border-box;\n\n  white-space: nowrap;\n}\n\n.vis-time-axis .vis-text.vis-measure {\n  position: absolute;\n  padding-left: 0;\n  padding-right: 0;\n  margin-left: 0;\n  margin-right: 0;\n  visibility: hidden;\n}\n\n.vis-time-axis .vis-grid.vis-vertical {\n  position: absolute;\n  border-left: 1px solid;\n}\n\n.vis-time-axis .vis-grid.vis-vertical-rtl {\n  position: absolute;\n  border-right: 1px solid;\n}\n\n.vis-time-axis .vis-grid.vis-minor {\n  border-color: #e5e5e5;\n}\n\n.vis-time-axis .vis-grid.vis-major {\n  border-color: #bfbfbf;\n}\n\n.vis-timeline {\n  position: relative;\n  border: 1px solid #bfbfbf;\n  overflow: hidden;\n  padding: 0;\n  margin: 0;\n  box-sizing: border-box;\n}\n\n.vis-loading-screen {\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n/*# sourceMappingURL=vis-timeline-graph2d.css.map */", ".planning-calendar .planning-calendar-toolbar {\n  margin-bottom: 10px;\n}\n.planning-calendar .planning-calendar-toolbar .planning-calendar-picker-wrap {\n  overflow: hidden;\n}\n.planning-calendar .planning-calendar-toolbar .select2-container {\n  width: 100% !important;\n}\n.planning-calendar .planning-calendar-toolbar .btn-group {\n  margin-left: 8px;\n  white-space: nowrap;\n}\n.planning-calendar.planning-calendar--modal .planning-calendar-board {\n  height: calc(100vh - 250px);\n}\n.planning-calendar.planning-calendar--page .planning-calendar-board {\n  height: calc(100vh - 200px);\n}\n.planning-calendar .planning-calendar-canvas {\n  position: relative;\n}\n.planning-calendar .planning-calendar-canvas .planning-calendar-empty {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  text-align: center;\n  color: #808080;\n  pointer-events: none;\n  max-width: 60%;\n}\n.planning-calendar .planning-calendar-canvas .planning-calendar-empty .fa {\n  font-size: 42px;\n  margin-bottom: 12px;\n  opacity: 0.5;\n}\n.planning-calendar .planning-calendar-canvas .planning-calendar-empty p {\n  margin: 0;\n  font-size: 15px;\n}\n.planning-calendar .planning-calendar-canvas .vis-timeline {\n  border: 1px solid #ddd;\n  font-size: 13px;\n  font-family: inherit;\n}\n.planning-calendar .planning-calendar-canvas .vis-time-axis .vis-grid.vis-minor {\n  border-color: #ececec;\n}\n.planning-calendar .planning-calendar-canvas .vis-time-axis .vis-grid.vis-major {\n  border-color: #ddd;\n}\n.planning-calendar .planning-calendar-canvas .vis-time-axis .vis-grid.vis-today {\n  background-color: rgba(255, 220, 40, 0.15);\n}\n.planning-calendar .planning-calendar-canvas .vis-time-axis .vis-grid.vis-saturday,\n.planning-calendar .planning-calendar-canvas .vis-time-axis .vis-grid.vis-sunday {\n  background-color: rgba(208, 208, 208, 0.18);\n}\n.planning-calendar .planning-calendar-canvas .vis-time-axis .vis-text {\n  color: #808080;\n  padding: 3px 6px;\n}\n.planning-calendar .planning-calendar-canvas .vis-time-axis .vis-text.vis-major {\n  color: #4d4d4d;\n  font-weight: 600;\n}\n.planning-calendar .planning-calendar-canvas .vis-text.vis-today {\n  color: #4d4d4d;\n  font-weight: 600;\n}\n.planning-calendar .planning-calendar-canvas .vis-item {\n  border-radius: 3px;\n  border-width: 1px;\n  color: #fff;\n  font-size: 0.85em;\n  line-height: 1.3;\n}\n.planning-calendar .planning-calendar-canvas .vis-item .vis-item-content {\n  padding: 1px 4px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.planning-calendar .planning-calendar-canvas .vis-item.vis-selected {\n  box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.15);\n}\n.planning-calendar .planning-calendar-canvas .vis-item.planning-calendar-conflict {\n  border-color: #ea3323;\n  border-width: 2px;\n  box-shadow: 0 0 0 1px #ea3323;\n  background-image: repeating-linear-gradient(45deg, rgba(221, 75, 57, 0.35), rgba(221, 75, 57, 0.35) 4px, transparent 4px, transparent 9px);\n}\n.planning-calendar .planning-calendar-canvas .vis-item.vis-background {\n  opacity: 0.2;\n}\n.planning-calendar .planning-calendar-canvas .vis-labelset .vis-label,\n.planning-calendar .planning-calendar-canvas .vis-foreground .vis-group {\n  border-color: #ddd;\n}\n.planning-calendar .planning-calendar-canvas .vis-labelset .vis-label {\n  color: #4d4d4d;\n}\n.planning-calendar .planning-calendar-canvas .vis-labelset .vis-label .vis-inner {\n  display: inline-block;\n  max-width: 25vw;\n  padding: 5px 10px;\n  font-weight: 500;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.planning-calendar .planning-calendar-canvas .vis-panel.vis-left,\n.planning-calendar .planning-calendar-canvas .vis-panel.vis-top,\n.planning-calendar .planning-calendar-canvas .vis-panel.vis-bottom {\n  border-color: #ddd;\n}\n.planning-calendar .planning-calendar-canvas .vis-current-time {\n  background-color: #ea3323;\n  width: 2px;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUva3Vyc28vYXBwcy9rdXJzby9yZWxlYXNlcy8yMDI2MDkzMDEyNDk1My9hcHAvamF2YXNjcmlwdC9jb21wb25lbnRzL3BsYW5uaW5nX2NhbGVuZGFyIiwic291cmNlcyI6WyJwbGFubmluZ19jYWxlbmRhci5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdFO0VBQ0U7O0FBR0E7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTs7QUFLSjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxPQXZDVTtFQXdDVjtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTs7QUFJRjtFQUNFOztBQUdGO0VBQ0UsY0F4RVk7O0FBNEVkO0VBQ0Usa0JBNUVROztBQStFVjtBQUFBO0VBRUUsa0JBaEZVOztBQW9GWjtFQUNFLE9BbEZVO0VBbUZWOztBQUdGO0VBQ0UsT0F4RlU7RUF5RlY7O0FBR0Y7RUFDRSxPQTdGVTtFQThGVjs7QUFJRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOztBQU1KO0VBQ0UsY0F6SFM7RUEwSFQ7RUFDQTtFQUNBOztBQVVGO0VBQ0U7O0FBSUY7QUFBQTtFQUVFLGNBaEpZOztBQW1KZDtFQUNFLE9BaEpVOztBQXFKVjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUtKO0FBQUE7QUFBQTtFQUdFLGNBeEtZOztBQTRLZDtFQUNFLGtCQTFLUztFQTJLVCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFBsYW5uaW5nIGNhbGVuZGFyIHRpbWVsaW5lIOKAlCBzdHlsZWQgdG8gcmVzZW1ibGUgRnVsbENhbGVuZGFyIDYgd2l0aGluIHRoZVxuLy8gQm9vdHN0cmFwIDMgLyBBZG1pbkxURSB0aGVtZS4gQ29sb3IgdmFsdWVzIG1pcnJvciBGdWxsQ2FsZW5kYXIncyBDU1MgdmFyaWFibGVzLlxuXG4kZmMtYm9yZGVyLWNvbG9yOiAjZGRkO1xuJGZjLXRvZGF5LWJnOiByZ2JhKDI1NSwgMjIwLCA0MCwgMC4xNSk7XG4kZmMtbmV1dHJhbC1iZzogcmdiYSgyMDgsIDIwOCwgMjA4LCAwLjE4KTtcbiRmYy1ub3ctY29sb3I6ICNlYTMzMjM7XG4kZmMtdGV4dC1jb2xvcjogIzRkNGQ0ZDtcbiRmYy1tdXRlZC10ZXh0OiAjODA4MDgwO1xuXG4ucGxhbm5pbmctY2FsZW5kYXIge1xuICAucGxhbm5pbmctY2FsZW5kYXItdG9vbGJhciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcblxuICAgIC8vIEJ1dHRvbnMgZmxvYXQgcmlnaHQ7IHRoZSBwaWNrZXIgd3JhcCBmaWxscyB0aGUgcmVtYWluaW5nIHdpZHRoIGJlc2lkZSB0aGVtLlxuICAgIC5wbGFubmluZy1jYWxlbmRhci1waWNrZXItd3JhcCB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuOyAvLyBuZXcgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZpbGxzIHNwYWNlIG5leHQgdG8gdGhlIGZsb2F0ZWQgYnV0dG9uc1xuICAgIH1cblxuICAgIC5zZWxlY3QyLWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5idG4tZ3JvdXAge1xuICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICB9XG5cbiAgLy8gQm9hcmQgaGVpZ2h0IGRpZmZlcnMgYmV0d2VlbiB0aGUgbW9kYWwgYW5kIHRoZSBmdWxsIHBhZ2UgKGRpZmZlcmVudCBzdXJyb3VuZGluZyBjaHJvbWUpLlxuICAmLnBsYW5uaW5nLWNhbGVuZGFyLS1tb2RhbCAucGxhbm5pbmctY2FsZW5kYXItYm9hcmQge1xuICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDI1MHB4KTtcbiAgfVxuXG4gICYucGxhbm5pbmctY2FsZW5kYXItLXBhZ2UgLnBsYW5uaW5nLWNhbGVuZGFyLWJvYXJkIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAyMDBweCk7XG4gIH1cblxuICAucGxhbm5pbmctY2FsZW5kYXItY2FudmFzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAucGxhbm5pbmctY2FsZW5kYXItZW1wdHkge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGNvbG9yOiAkZmMtbXV0ZWQtdGV4dDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgbWF4LXdpZHRoOiA2MCU7XG5cbiAgICAgIC5mYSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNDJweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgfVxuXG4gICAgICBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnZpcy10aW1lbGluZSB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAkZmMtYm9yZGVyLWNvbG9yO1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgfVxuXG4gICAgLy8gR3JpZCBsaW5lcyDigJQgbGlnaHQgbGlrZSBGdWxsQ2FsZW5kYXIncyBzbG90L2RheSBsaW5lcy5cbiAgICAudmlzLXRpbWUtYXhpcyAudmlzLWdyaWQudmlzLW1pbm9yIHtcbiAgICAgIGJvcmRlci1jb2xvcjogbGlnaHRlbigkZmMtYm9yZGVyLWNvbG9yLCA2JSk7XG4gICAgfVxuXG4gICAgLnZpcy10aW1lLWF4aXMgLnZpcy1ncmlkLnZpcy1tYWpvciB7XG4gICAgICBib3JkZXItY29sb3I6ICRmYy1ib3JkZXItY29sb3I7XG4gICAgfVxuXG4gICAgLy8gVG9kYXkgYW5kIHdlZWtlbmQgY29sdW1uIHNoYWRpbmcuXG4gICAgLnZpcy10aW1lLWF4aXMgLnZpcy1ncmlkLnZpcy10b2RheSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmMtdG9kYXktYmc7XG4gICAgfVxuXG4gICAgLnZpcy10aW1lLWF4aXMgLnZpcy1ncmlkLnZpcy1zYXR1cmRheSxcbiAgICAudmlzLXRpbWUtYXhpcyAudmlzLWdyaWQudmlzLXN1bmRheSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmMtbmV1dHJhbC1iZztcbiAgICB9XG5cbiAgICAvLyBBeGlzIGxhYmVscy5cbiAgICAudmlzLXRpbWUtYXhpcyAudmlzLXRleHQge1xuICAgICAgY29sb3I6ICRmYy1tdXRlZC10ZXh0O1xuICAgICAgcGFkZGluZzogM3B4IDZweDtcbiAgICB9XG5cbiAgICAudmlzLXRpbWUtYXhpcyAudmlzLXRleHQudmlzLW1ham9yIHtcbiAgICAgIGNvbG9yOiAkZmMtdGV4dC1jb2xvcjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnZpcy10ZXh0LnZpcy10b2RheSB7XG4gICAgICBjb2xvcjogJGZjLXRleHQtY29sb3I7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC8vIEV2ZW50cyDigJQgRnVsbENhbGVuZGFyLWxpa2Ugcm91bmRlZCwgY29tcGFjdCBibG9ja3MuXG4gICAgLnZpcy1pdGVtIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBmb250LXNpemU6IDAuODVlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG5cbiAgICAgIC52aXMtaXRlbS1jb250ZW50IHtcbiAgICAgICAgcGFkZGluZzogMXB4IDRweDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgICYudmlzLXNlbGVjdGVkIHtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRG91YmxlLWJvb2tpbmc6IG92ZXJsYXBwaW5nIGV2ZW50cyBvZiB0aGUgc2FtZSByZXNvdXJjZSBnZXQgYSByZWQgb3V0bGluZSArIGhhdGNoXG4gICAgLy8gb3ZlciB0aGVpciBvd24gY29sb3IsIHNvIGNvbmZsaWN0cyBzdGFuZCBvdXQgd2l0aG91dCBzdGFja2luZyB0aGUgcm93cy5cbiAgICAudmlzLWl0ZW0ucGxhbm5pbmctY2FsZW5kYXItY29uZmxpY3Qge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkZmMtbm93LWNvbG9yO1xuICAgICAgYm9yZGVyLXdpZHRoOiAycHg7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggJGZjLW5vdy1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoXG4gICAgICAgIDQ1ZGVnLFxuICAgICAgICByZ2JhKDIyMSwgNzUsIDU3LCAwLjM1KSxcbiAgICAgICAgcmdiYSgyMjEsIDc1LCA1NywgMC4zNSkgNHB4LFxuICAgICAgICB0cmFuc3BhcmVudCA0cHgsXG4gICAgICAgIHRyYW5zcGFyZW50IDlweFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBCYWNrZ3JvdW5kIGl0ZW1zIChhbGwtZGF5IC8gYm91bmRhcnkgbWFya2Vycykgc3RheSBzdWJ0bGUuXG4gICAgLnZpcy1pdGVtLnZpcy1iYWNrZ3JvdW5kIHtcbiAgICAgIG9wYWNpdHk6IDAuMjtcbiAgICB9XG5cbiAgICAvLyBSZXNvdXJjZSByb3dzIChsZWZ0IGxhYmVsIGNvbHVtbikuXG4gICAgLnZpcy1sYWJlbHNldCAudmlzLWxhYmVsLFxuICAgIC52aXMtZm9yZWdyb3VuZCAudmlzLWdyb3VwIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGZjLWJvcmRlci1jb2xvcjtcbiAgICB9XG5cbiAgICAudmlzLWxhYmVsc2V0IC52aXMtbGFiZWwge1xuICAgICAgY29sb3I6ICRmYy10ZXh0LWNvbG9yO1xuXG4gICAgICAvLyBDYXAgdGhlIHJlc291cmNlLW5hbWUgY29sdW1uIHNvIGl0IHN0YXlzIHVzYWJsZSBvbiBzbWFsbC9tb2JpbGUgc2NyZWVucy5cbiAgICAgIC8vIHZpcyBzaXplcyB0aGUgbGVmdCBwYW5lbCBmcm9tIHRoZSBsYWJlbCBjb250ZW50LCBzbyBib3VuZGluZyB0aGUgaW5uZXJcbiAgICAgIC8vIGNvbnRlbnQgYm91bmRzIHRoZSB3aG9sZSBjb2x1bW4uXG4gICAgICAudmlzLWlubmVyIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXgtd2lkdGg6IDI1dnc7XG4gICAgICAgIHBhZGRpbmc6IDVweCAxMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgLy8gVGhlIHJvdyBsYWJlbCBsaW5rIGtlZXBzIHRoZSB0aGVtZSdzIG5vcm1hbCBsaW5rIGNvbG9yIChubyBvdmVycmlkZSBoZXJlKS5cbiAgICAgIH1cbiAgICB9XG5cbiAgICAudmlzLXBhbmVsLnZpcy1sZWZ0LFxuICAgIC52aXMtcGFuZWwudmlzLXRvcCxcbiAgICAudmlzLXBhbmVsLnZpcy1ib3R0b20ge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkZmMtYm9yZGVyLWNvbG9yO1xuICAgIH1cblxuICAgIC8vIFwiTm93XCIgaW5kaWNhdG9yIOKAlCBGdWxsQ2FsZW5kYXIncyByZWQgY3VycmVudC10aW1lIGxpbmUuXG4gICAgLnZpcy1jdXJyZW50LXRpbWUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZjLW5vdy1jb2xvcjtcbiAgICAgIHdpZHRoOiAycHg7XG4gICAgfVxuICB9XG59XG4iXX0= */", ".dropdown-menu.dropdown-menu-scrollable {\n  max-height: 400px;\n  overflow-y: auto;\n}\n\n.dropdown-menu-scrollable .dropdown-header-sticky {\n  position: sticky;\n  top: 0;\n  z-index: 1;\n  background: #fff;\n  padding: 6px 10px;\n}\n\n.dropdown-menu > li > a.search-view-entry {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.search-view-entry-name {\n  flex: 1 1 auto;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.column-picker-list {\n  counter-reset: column-picker;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  max-height: 40vh;\n  overflow-y: auto;\n  border: 1px solid #d2d6de;\n  border-radius: 3px;\n}\n\n.column-picker-row {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 6px 8px;\n  border-bottom: 1px solid #f4f4f4;\n  background: #fff;\n}\n.column-picker-row:last-child {\n  border-bottom: 0;\n}\n.column-picker-row::before {\n  counter-increment: column-picker;\n  content: counter(column-picker) \".\";\n  min-width: 2em;\n  color: #999;\n  text-align: right;\n}\n\n.column-picker-handle {\n  cursor: move;\n  padding: 0 6px;\n  color: #999;\n  touch-action: none;\n}\n\n.column-picker-label {\n  flex: 1 1 auto;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.column-picker-row .btn-group {\n  flex: 0 0 auto;\n}\n\n.sortable-ghost {\n  opacity: 0.4;\n}\n\n.sortable-drag {\n  background: #f9f9f9;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUva3Vyc28vYXBwcy9rdXJzby9yZWxlYXNlcy8yMDI2MDkzMDEyNDk1My9hcHAvamF2YXNjcmlwdC9jb21wb25lbnRzIiwic291cmNlcyI6WyJzZWFyY2hfdGFibGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTtFQUNFO0VBQ0E7OztBQUlGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBS0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUtGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBRUE7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0UiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBIGRyb3Bkb3duIHdpdGggbW9yZSBlbnRyaWVzIHRoYW4gZml0IG9uIHNjcmVlbiwgYXMgdXNlZCBmb3IgcGlja2luZyB0aGUgbGlzdCBhIG5ldyBzYXZlZCB2aWV3IGlzXG4vLyBmb3IuIFNhbWUgaWRlYSBhcyB0aGUgcHJvZHVjdCBkcm9wZG93biBvZiBhbiBpbnZvaWNlLCB3aGljaCBkb2VzIGl0IHdpdGggYW4gaW5saW5lIHN0eWxlLlxuLmRyb3Bkb3duLW1lbnUuZHJvcGRvd24tbWVudS1zY3JvbGxhYmxlIHtcbiAgbWF4LWhlaWdodDogNDAwcHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi8vIFRoZSBzZWFyY2ggZmllbGQgc3RheXMgcHV0IHdoaWxlIHRoZSBlbnRyaWVzIGJlbG93IGl0IHNjcm9sbC5cbi5kcm9wZG93bi1tZW51LXNjcm9sbGFibGUgLmRyb3Bkb3duLWhlYWRlci1zdGlja3kge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDE7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIHBhZGRpbmc6IDZweCAxMHB4O1xufVxuXG4vLyBUaGUgc2F2ZWQgdmlld3MgaW4gdGhlIGZvb3RlciBtZW51IG9mIGEgbGlzdC4gTGFpZCBvdXQgd2l0aCBmbGV4Ym94IHJhdGhlciB0aGFuIGEgZmxvYXQsIHNvIHRoZVxuLy8gbWFya2VyIGljb25zIHN0YXkgb24gdGhlIHRleHQgYmFzZWxpbmUgaW5zdGVhZCBvZiByaWRpbmcgdXAgb3V0IG9mIHRoZSBsaW5lLlxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEuc2VhcmNoLXZpZXctZW50cnkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDZweDtcbn1cblxuLnNlYXJjaC12aWV3LWVudHJ5LW5hbWUge1xuICBmbGV4OiAxIDEgYXV0bztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi8vIFRoZSBvcmRlcmVkIGxpc3Qgb2YgY2hvc2VuIGNvbHVtbnMuIFRoZSBudW1iZXJpbmcgaXMgYSBDU1MgY291bnRlciwgc28gcmVvcmRlcmluZyBuZXZlciBoYXMgdG9cbi8vIHJlbnVtYmVyIGFueXRoaW5nLlxuLmNvbHVtbi1waWNrZXItbGlzdCB7XG4gIGNvdW50ZXItcmVzZXQ6IGNvbHVtbi1waWNrZXI7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbWF4LWhlaWdodDogNDB2aDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgI2QyZDZkZTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4uY29sdW1uLXBpY2tlci1yb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDZweDtcbiAgcGFkZGluZzogNnB4IDhweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmNGY0ZjQ7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBjb3VudGVyLWluY3JlbWVudDogY29sdW1uLXBpY2tlcjtcbiAgICBjb250ZW50OiBjb3VudGVyKGNvbHVtbi1waWNrZXIpIFwiLlwiO1xuICAgIG1pbi13aWR0aDogMmVtO1xuICAgIGNvbG9yOiAjOTk5O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICB9XG59XG5cbi5jb2x1bW4tcGlja2VyLWhhbmRsZSB7XG4gIGN1cnNvcjogbW92ZTtcbiAgcGFkZGluZzogMCA2cHg7XG4gIGNvbG9yOiAjOTk5O1xuICAvLyBvdGhlcndpc2UgdGhlIGJyb3dzZXIgY2xhaW1zIHRoZSBnZXN0dXJlIGFzIGEgc2Nyb2xsIGJlZm9yZSB0aGUgZHJhZyBkZWxheSBpcyBvdmVyXG4gIHRvdWNoLWFjdGlvbjogbm9uZTtcbn1cblxuLmNvbHVtbi1waWNrZXItbGFiZWwge1xuICBmbGV4OiAxIDEgYXV0bztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5jb2x1bW4tcGlja2VyLXJvdyAuYnRuLWdyb3VwIHtcbiAgZmxleDogMCAwIGF1dG87XG59XG5cbi5zb3J0YWJsZS1naG9zdCB7XG4gIG9wYWNpdHk6IDAuNDtcbn1cblxuLnNvcnRhYmxlLWRyYWcge1xuICBiYWNrZ3JvdW5kOiAjZjlmOWY5O1xufVxuIl19 */", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(element, attributeName) {\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value.replace(/_/g, \"\"));\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import {Controller} from '@hotwired/stimulus';\nimport {loadStripe} from '@stripe/stripe-js/pure';\nimport {alert} from 'bootbox';\nimport {getMetaValue} from \"../helpers\";\n\nconst APPEARANCE = {\n    theme: 'stripe',\n};\n\nexport class StripeController extends Controller {\n\n    static values = {\n        pubkey: String,\n        clientSecretUrl: String,\n        returnUrl: String,\n    }\n\n    static targets = ['element', 'message', 'form', 'submit', 'paymentMethodInfo', 'change']\n\n    connect() {\n        this.connectAsync().then()\n    }\n\n    async connectAsync() {\n        this.stripe = await loadStripe(this.pubkeyValue, { locale: document.documentElement.lang });\n        if (this.paymentMethodInfoTargets.length === 0) {\n            await this.updatePaymentMethod();\n        } else {\n            this.formTarget.hidden = true;\n            this.submitTarget.hidden = true;\n            this.changeTargets.forEach(t => t.hidden = false)\n        }\n    }\n\n    async updatePaymentMethod() {\n        if (!this.elements) {\n            this.elements = this.stripe.elements({ appearance: APPEARANCE, clientSecret: await this.getClientSecret() });\n            const paymentElement = this.elements.create('payment');\n            paymentElement.mount(this.elementTarget);\n        }\n        this.formTarget.hidden = false;\n        this.submitTarget.hidden = false;\n        this.paymentMethodInfoTargets.forEach(t => t.hidden = true)\n        this.changeTargets.forEach(t => t.hidden = true)\n    }\n\n    async cancelUpdatePaymentMethod() {\n        this.formTarget.hidden = true;\n        this.submitTarget.hidden = true;\n        this.paymentMethodInfoTargets.forEach(t => t.hidden = false)\n        this.changeTargets.forEach(t => t.hidden = false)\n    }\n\n    async handleSubmit(e) {\n        e.preventDefault();\n        this.setLoading(true);\n\n        const { error } = await this.stripe.confirmSetup({\n            elements: this.elements,\n            confirmParams: {\n                // Make sure to change this to your payment completion page\n                return_url: this.returnUrlValue,\n            },\n        });\n\n        console.log(error)\n\n        // This point will only be reached if there is an immediate error when\n        // confirming the payment. Otherwise, your customer will be redirected to\n        // your `return_url`. For some payment methods like iDEAL, your customer will\n        // be redirected to an intermediate site first to authorize the payment, then\n        // redirected to the `return_url`.\n        if (error.type === 'card_error' || error.type === 'validation_error') {\n            alert(error.message);\n        } else {\n            alert('An unexpected error occurred.');\n        }\n\n        this.setLoading(false);\n    }\n    async getClientSecret() {\n        const response = await fetch(this.clientSecretUrlValue, {\n            method: 'POST',\n            headers: this.headers\n        });\n        return await response.text();\n    }\n\n    setLoading(isLoading) {\n        this.submitTarget.disabled = !!isLoading;\n    }\n\n    get headers() {\n        return { 'X-CSRF-Token': getMetaValue('csrf-token') };\n    }\n\n}\n\n", "export function getMetaValue(name) {\n    const element = findElement(document.head, `meta[name=\"${name}\"]`);\n    if (element) {\n        return element.getAttribute(\"content\");\n    }\n}\n\nexport function findElement(root, selector) {\n    if (typeof root == \"string\") {\n        selector = root;\n        root = document;\n    }\n    return root.querySelector(selector);\n}\n\nexport function toArray(value) {\n    if (Array.isArray(value)) {\n        return value;\n    } else if (Array.from) {\n        return Array.from(value);\n    } else {\n        return [].slice.call(value);\n    }\n}\n\nexport function removeElement(el) {\n    if (el && el.parentNode) {\n        el.parentNode.removeChild(el);\n    }\n}\n\nexport function insertAfter(el, referenceNode) {\n    return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);\n}\n", "import {Controller} from '@hotwired/stimulus';\nexport class EmailAddressController extends Controller {\n    // static targets = [\"span\"];\n    static values = {\n        address: String\n    }\n\n    connect() {\n        this.validate(this.addressValue);\n    }\n\n    addressValueChanged() {\n        this.validate(this.addressValue);\n    }\n\n    validate(email) {\n        if (!email) {\n            this.element.classList.add(\"text-red\");\n            this.element.innerHTML = 'E-Mail-Adresse fehlt';\n            return;\n        }\n        this.element.innerHTML = email.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n        if (this.validateEmail(email)) {\n            this.element.classList.remove(\"text-yellow\");\n        } else {\n            this.element.classList.add(\"text-yellow\");\n        }\n        return false;\n    }\n\n    validateEmail(email) {\n        var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n        return re.test(email);\n    }\n\n}\n\n", "import Dropzone from 'dropzone';\nimport {Controller} from '@hotwired/stimulus';\nimport {DirectUpload} from '@rails/activestorage';\nimport {findElement, getMetaValue, insertAfter, removeElement} from '../helpers';\nimport {alert} from 'bootbox';\n\nexport class DropzoneController extends Controller {\n\n    static targets = ['input'];\n\n    connect() {\n        this.dropZone = createDropZone(this);\n        this.hideFileInput();\n        this.bindEvents();\n        this.addStoredFiles();\n    }\n\n    // Private\n    hideFileInput() {\n        if (!this.inputTarget.getAttribute('multiple')) {\n            this.inputTarget.disabled = true;\n        }\n        this.inputTarget.style.display = 'none';\n    }\n\n    bindEvents() {\n        this.dropZone.on(\"addedfile\", file => {\n            setTimeout(() => {\n                (file.accepted || file.signed_id) && createDirectUploadController(this, file).start();\n            }, 500);\n        });\n\n        this.dropZone.on('removedfile', file => {\n            file.controller && removeElement(file.controller.hiddenInput);\n        });\n\n        this.dropZone.on('canceled', file => {\n            file.controller && file.controller.xhr.abort();\n        });\n\n        this.dropZone.on('success', (file) => {\n            if (!file.signed_id && !file.download_url) {\n                return;\n            }\n            const url = file.download_url ? file.download_url : `/rails/active_storage/blobs/${file.signed_id}/${encodeURI(file.name)}`;\n\n            findElement(\n                file.previewTemplate,\n                '.dz-download'\n            ).setAttribute('href', url);\n        })\n\n    }\n\n    addStoredFiles() {\n        const storedFilesJSON = this.data.get('storedFiles')\n        if (storedFilesJSON) {\n            const files = JSON.parse(storedFilesJSON);\n            // data-dropzone-stored-files='[{\"name\":\"Teilnahmebestaetigung Bamf 01-11-Vorlage-Gaeste.odt\",\"size\":108}]'\n            files.forEach(mockFile => {\n                const file = { ...mockFile, accepted: true };\n                this.dropZone.files.push(file);\n                this.dropZone.emit('addedfile', file);\n                // if (mockFile.url) {\n                //     this.createThumbnailFromUrl(mockFile, mockFile.url);\n                // }\n            });\n        }\n    }\n\n    get headers() {\n        return { 'X-CSRF-Token': getMetaValue('csrf-token') };\n    }\n\n    get url() {\n        return this.inputTarget.getAttribute('data-direct-upload-url');\n    }\n\n    get maxFiles() {\n        return this.data.get('maxFiles') || 1;\n    }\n\n    get maxFileSize() {\n        return this.data.get('maxFileSize') || 1;\n    }\n\n    get acceptedFiles() {\n        return this.data.get('acceptedFiles');\n    }\n\n    get addRemoveLinks() {\n        return this.data.get('addRemoveLink') || true;\n    }\n}\n\nclass DirectUploadController {\n    constructor(source, file) {\n        this.source = source;\n        this.file = file;\n    }\n\n    start() {\n        this.file.controller = this;\n        this.hiddenInput = this.createHiddenInput();\n        if (this.file.signed_id) {\n            // existing file, no need to upload, but initialize hidden field etc.\n            this.hiddenInput.value = this.file.signed_id;\n            this.emitDropzoneSuccess();\n            return;\n        }\n        const directUpload = createDirectUpload(this.file, this.source.url, this);\n        directUpload.create((error, attributes) => {\n            if (error) {\n                removeElement(this.hiddenInput);\n                this.emitDropzoneError(error);\n            } else {\n                this.hiddenInput.value = attributes.signed_id;\n                this.file.signed_id = attributes.signed_id;\n                this.emitDropzoneSuccess();\n            }\n        });\n    }\n\n    createHiddenInput() {\n        const input = document.createElement('input');\n        input.type = 'hidden';\n        input.name = this.source.inputTarget.name;\n        insertAfter(input, this.source.inputTarget);\n        return input;\n    }\n\n    directUploadWillStoreFileWithXHR(xhr) {\n        this.bindProgressEvent(xhr);\n        this.emitDropzoneUploading();\n    }\n\n    bindProgressEvent(xhr) {\n        this.xhr = xhr;\n        this.xhr.upload.addEventListener('progress', event =>\n            this.uploadRequestDidProgress(event)\n        );\n    }\n\n    uploadRequestDidProgress(event) {\n        const element = this.source.element;\n        const progress = (event.loaded / event.total) * 100;\n        findElement(\n            this.file.previewTemplate,\n            '.dz-upload'\n        ).style.width = `${progress}%`;\n    }\n\n    emitDropzoneUploading() {\n        this.file.status = Dropzone.UPLOADING;\n        this.source.dropZone.emit('processing', this.file);\n    }\n\n    emitDropzoneError(error) {\n        this.file.status = Dropzone.ERROR;\n        this.source.dropZone.emit('error', this.file, error);\n        this.source.dropZone.emit('complete', this.file);\n    }\n\n    emitDropzoneSuccess() {\n        this.file.status = Dropzone.SUCCESS;\n        this.source.dropZone.emit('success', this.file);\n        this.source.dropZone.emit('complete', this.file);\n    }\n}\n\nfunction createDirectUploadController(source, file) {\n    return new DirectUploadController(source, file);\n}\n\nfunction createDirectUpload(file, url, controller) {\n    return new DirectUpload(file, url, controller);\n}\n\nfunction createDropZone(controller) {\n\n    const template = '<div class=\"dz-preview dz-file-preview\"> <div class=\"dz-image\"><img data-dz-thumbnail/></div> <div class=\"dz-details\"> <div class=\"dz-size\"><span data-dz-size></span></div> <div class=\"dz-filename\"><span data-dz-name></span></div><div class=\"dz-buttons\" data-dz-buttons><a target=\"_blank\" href=\"#\" class=\"dz-download\" data-dz-download><i class=\"fa fa-eye\"></i></a> <a href=\"#\"><i class=\"fa fa-trash\" data-dz-remove></i></a></div> </div> <div class=\"dz-progress\"> <span class=\"dz-upload\" data-dz-uploadprogress></span> </div> <div class=\"dz-error-message\"><span data-dz-errormessage></span></div> <div class=\"dz-success-mark\"> <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"> <title>Check</title> <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <path d=\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" stroke-opacity=\"0.198794158\" stroke=\"#747474\" fill-opacity=\"0.816519475\" fill=\"#FFFFFF\"></path> </g> </svg> </div> <div class=\"dz-error-mark\"> <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"> <title>Error</title> <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g stroke=\"#747474\" stroke-opacity=\"0.198794158\" fill=\"#FFFFFF\" fill-opacity=\"0.816519475\"> <path d=\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\"></path> </g> </g> </svg> </div> </div>';\n\n    const dropzone = new Dropzone(controller.element, {\n        url: controller.url,\n        headers: controller.headers,\n        maxFiles: controller.maxFiles,\n        maxFilesize: controller.maxFileSize,\n        acceptedFiles: controller.acceptedFiles,\n        addRemoveLinks: false,\n        autoQueue: false,\n        createImageThumbnails: false,\n        dictFallbackMessage: 'Ihr Browser unterst\u00FCtzt Drag&Drop Dateiuploads nicht.',\n        dictFallbackText: 'Benutzen Sie das Formular um Ihre Dateien hochzuladen.',\n        dictFileTooBig: 'Die gew\u00E4hlte Datei ist zu gro\u00DF. Die maximale Dateigr\u00F6\u00DFe betr\u00E4gt '+ controller.maxFileSize +'MB.',\n        dictInvalidFileType: 'Eine Datei dieses Typs kann nicht hochgeladen werden.',\n        dictResponseError: 'Der Server hat ihre Anfrage abgelehnt.',\n        dictCancelUpload: 'Hochladen abbrechen',\n        dictCancelUploadConfirmation: null,\n        dictRemoveFile: 'Entfernen',\n        dictMaxFilesExceeded: 'Sie k\u00F6nnen keine weiteren Dateien mehr hochladen.',\n        previewTemplate: template\n    });\n    dropzone.on('error', (file, error, __) => {\n        alert(error);\n        dropzone.removeFile(file);\n    });\n    return dropzone;\n}\n\n", "import {Controller} from '@hotwired/stimulus';\n\nexport class SelectToggleController extends Controller {\n\n    static targets = [\"element\", \"select\"]\n\n    connect() {\n        for (let element of this.elementTargets) {\n            this.toggle(element, this.selectTarget.value);\n            this.selectTarget.addEventListener('change', event => {\n                for (let element of this.elementTargets) {\n                    this.toggle(element, event.target.value);\n                }\n            })\n        }\n    }\n\n    toggle(element, selectValue) {\n        const visibleValues = element.dataset.values;\n        if (element && visibleValues != undefined) {\n            let hidden;\n            switch (visibleValues) {\n                case '*':\n                    hidden = !selectValue;\n                    break;\n                case '':\n                    hidden = true;\n                    break;\n                default:\n                    hidden = !visibleValues.split(',').includes(selectValue);\n            }\n            element.hidden = hidden;\n            if (['INPUT', 'SELECT'].includes(element.tagName)) {\n                element.disabled = hidden;\n            }\n        }\n    }\n\n}\n", "export function lastItemOf(arr) {\n  return arr[arr.length - 1];\n}\n\n// push only the items not included in the array\nexport function pushUnique(arr, ...items) {\n  items.forEach((item) => {\n    if (arr.includes(item)) {\n      return;\n    }\n    arr.push(item);\n  });\n  return arr;\n}\n\nexport function stringToArray(str, separator) {\n  // convert empty string to an empty array\n  return str ? str.split(separator) : [];\n}\n\nexport function isInRange(testVal, min, max) {\n  const minOK = min === undefined || testVal >= min;\n  const maxOK = max === undefined || testVal <= max;\n  return minOK && maxOK;\n}\n\nexport function limitToRange(val, min, max) {\n  if (val < min) {\n    return min;\n  }\n  if (val > max) {\n    return max;\n  }\n  return val;\n}\n\nexport function createTagRepeat(tagName, repeat, attributes = {}, index = 0, html = '') {\n  const openTagSrc = Object.keys(attributes).reduce((src, attr) => {\n    let val = attributes[attr];\n    if (typeof val === 'function') {\n      val = val(index);\n    }\n    return `${src} ${attr}=\"${val}\"`;\n  }, tagName);\n  html += `<${openTagSrc}></${tagName}>`;\n\n  const next = index + 1;\n  return next < repeat\n    ? createTagRepeat(tagName, repeat, attributes, next, html)\n    : html;\n}\n\n// Remove the spacing surrounding tags for HTML parser not to create text nodes\n// before/after elements\nexport function optimizeTemplateHTML(html) {\n  return html.replace(/>\\s+/g, '>').replace(/\\s+</, '<');\n}\n", "export function stripTime(timeValue) {\n  return new Date(timeValue).setHours(0, 0, 0, 0);\n}\n\nexport function today() {\n  return new Date().setHours(0, 0, 0, 0);\n}\n\n// Get the time value of the start of given date or year, month and day\nexport function dateValue(...args) {\n  switch (args.length) {\n    case 0:\n      return today();\n    case 1:\n      return stripTime(args[0]);\n  }\n\n  // use setFullYear() to keep 2-digit year from being mapped to 1900-1999\n  const newDate = new Date(0);\n  newDate.setFullYear(...args);\n  return newDate.setHours(0, 0, 0, 0);\n}\n\nexport function addDays(date, amount) {\n  const newDate = new Date(date);\n  return newDate.setDate(newDate.getDate() + amount);\n}\n\nexport function addWeeks(date, amount) {\n  return addDays(date, amount * 7);\n}\n\nexport function addMonths(date, amount) {\n  // If the day of the date is not in the new month, the last day of the new\n  // month will be returned. e.g. Jan 31 + 1 month \u2192 Feb 28 (not Mar 03)\n  const newDate = new Date(date);\n  const monthsToSet = newDate.getMonth() + amount;\n  let expectedMonth = monthsToSet % 12;\n  if (expectedMonth < 0) {\n    expectedMonth += 12;\n  }\n\n  const time = newDate.setMonth(monthsToSet);\n  return newDate.getMonth() !== expectedMonth ? newDate.setDate(0) : time;\n}\n\nexport function addYears(date, amount) {\n  // If the date is Feb 29 and the new year is not a leap year, Feb 28 of the\n  // new year will be returned.\n  const newDate = new Date(date);\n  const expectedMonth = newDate.getMonth();\n  const time = newDate.setFullYear(newDate.getFullYear() + amount);\n  return expectedMonth === 1 && newDate.getMonth() === 2 ? newDate.setDate(0) : time;\n}\n\n// Calculate the distance bettwen 2 days of the week\nfunction dayDiff(day, from) {\n  return (day - from + 7) % 7;\n}\n\n// Get the date of the specified day of the week of given base date\nexport function dayOfTheWeekOf(baseDate, dayOfWeek, weekStart = 0) {\n  const baseDay = new Date(baseDate).getDay();\n  return addDays(baseDate, dayDiff(dayOfWeek, weekStart) - dayDiff(baseDay, weekStart));\n}\n\nfunction calcWeekNum(dayOfTheWeek, sameDayOfFirstWeek) {\n  return Math.round((dayOfTheWeek - sameDayOfFirstWeek) / 604800000) + 1;\n}\n\n// Get the ISO week number of a date\nexport function getIsoWeek(date) {\n  // - Start of ISO week is Monday\n  // - Use Thursday for culculation because the first Thursday of ISO week is\n  //   always in January\n  const thuOfTheWeek = dayOfTheWeekOf(date, 4, 1);\n  // - Week 1 in ISO week is the week including Jan 04\n  // - Use the Thu of given date's week (instead of given date itself) to\n  //   calculate week 1 of the year so that Jan 01 - 03 won't be miscalculated\n  //   as week 0 when Jan 04 is Mon - Wed\n  const firstThu = dayOfTheWeekOf(new Date(thuOfTheWeek).setMonth(0, 4), 4, 1);\n  // return Math.round((thuOfTheWeek - firstThu) / 604800000) + 1;\n  return calcWeekNum(thuOfTheWeek, firstThu);\n}\n\n// Calculate week number in traditional week number system\n// @see https://en.wikipedia.org/wiki/Week#Other_week_numbering_systems\nfunction calcTraditionalWeekNumber(date, weekStart) {\n  // - Week 1 of traditional week is the week including the Jan 01\n  // - Use Jan 01 of given date's year to calculate the start of week 1\n  const startOfFirstWeek = dayOfTheWeekOf(new Date(date).setMonth(0, 1), weekStart, weekStart);\n  const startOfTheWeek = dayOfTheWeekOf(date, weekStart, weekStart);\n  const weekNum = calcWeekNum(startOfTheWeek, startOfFirstWeek);\n  if (weekNum < 53) {\n    return weekNum;\n  }\n  // If the 53rd week includes Jan 01, it's actually next year's week 1\n  const weekOneOfNextYear = dayOfTheWeekOf(new Date(date).setDate(32), weekStart, weekStart);\n  return startOfTheWeek === weekOneOfNextYear ? 1 : weekNum;\n}\n\n// Get the Western traditional week number of a date\nexport function getWesternTradWeek(date) {\n  // Start of Western traditionl week is Sunday\n  return calcTraditionalWeekNumber(date, 0);\n}\n\n// Get the Middle Eastern week number of a date\nexport function getMidEasternWeek(date) {\n  // Start of Middle Eastern week is Saturday\n  return calcTraditionalWeekNumber(date, 6);\n}\n\n// Get the start year of the period of years that includes given date\n// years: length of the year period\nexport function startOfYearPeriod(date, years) {\n  /* @see https://en.wikipedia.org/wiki/Year_zero#ISO_8601 */\n  const year = new Date(date).getFullYear();\n  return Math.floor(year / years) * years;\n}\n\n// Convert date to the first/last date of the month/year of the date\nexport function regularizeDate(date, timeSpan, useLastDate) {\n  if (timeSpan !== 1 && timeSpan !== 2) {\n    return date;\n  }\n  const newDate = new Date(date);\n  if (timeSpan === 1) {\n    useLastDate\n      ? newDate.setMonth(newDate.getMonth() + 1, 0)\n      : newDate.setDate(1);\n  } else {\n    useLastDate\n      ? newDate.setFullYear(newDate.getFullYear() + 1, 0, 0)\n      : newDate.setMonth(0, 1);\n  }\n  return newDate.setHours(0, 0, 0, 0);\n}\n", "import {stripTime, today} from './date.js';\nimport {lastItemOf} from './utils.js';\n\n// pattern for format parts\nexport const reFormatTokens = /dd?|DD?|mm?|MM?|yy?(?:yy)?/;\n// pattern for non date parts\nexport const reNonDateParts = /[\\s!-/:-@[-`{-~\u5E74\u6708\u65E5]+/;\n// cache for persed formats\nlet knownFormats = {};\n// parse funtions for date parts\nconst parseFns = {\n  y(date, year) {\n    return new Date(date).setFullYear(parseInt(year, 10));\n  },\n  m(date, month, locale) {\n    const newDate = new Date(date);\n    let monthIndex = parseInt(month, 10) - 1;\n\n    if (isNaN(monthIndex)) {\n      if (!month) {\n        return NaN;\n      }\n\n      const monthName = month.toLowerCase();\n      const compareNames = name => name.toLowerCase().startsWith(monthName);\n      // compare with both short and full names because some locales have periods\n      // in the short names (not equal to the first X letters of the full names)\n      monthIndex = locale.monthsShort.findIndex(compareNames);\n      if (monthIndex < 0) {\n        monthIndex = locale.months.findIndex(compareNames);\n      }\n      if (monthIndex < 0) {\n        return NaN;\n      }\n    }\n\n    newDate.setMonth(monthIndex);\n    return newDate.getMonth() !== normalizeMonth(monthIndex)\n      ? newDate.setDate(0)\n      : newDate.getTime();\n  },\n  d(date, day) {\n    return new Date(date).setDate(parseInt(day, 10));\n  },\n};\n// format functions for date parts\nconst formatFns = {\n  d(date) {\n    return date.getDate();\n  },\n  dd(date) {\n    return padZero(date.getDate(), 2);\n  },\n  D(date, locale) {\n    return locale.daysShort[date.getDay()];\n  },\n  DD(date, locale) {\n    return locale.days[date.getDay()];\n  },\n  m(date) {\n    return date.getMonth() + 1;\n  },\n  mm(date) {\n    return padZero(date.getMonth() + 1, 2);\n  },\n  M(date, locale) {\n    return locale.monthsShort[date.getMonth()];\n  },\n  MM(date, locale) {\n    return locale.months[date.getMonth()];\n  },\n  y(date) {\n    return date.getFullYear();\n  },\n  yy(date) {\n    return padZero(date.getFullYear(), 2).slice(-2);\n  },\n  yyyy(date) {\n    return padZero(date.getFullYear(), 4);\n  },\n};\n\n// get month index in normal range (0 - 11) from any number\nfunction normalizeMonth(monthIndex) {\n  return monthIndex > -1 ? monthIndex % 12 : normalizeMonth(monthIndex + 12);\n}\n\nfunction padZero(num, length) {\n  return num.toString().padStart(length, '0');\n}\n\nfunction parseFormatString(format) {\n  if (typeof format !== 'string') {\n    throw new Error(\"Invalid date format.\");\n  }\n  if (format in knownFormats) {\n    return knownFormats[format];\n  }\n\n  // sprit the format string into parts and seprators\n  const separators = format.split(reFormatTokens);\n  const parts = format.match(new RegExp(reFormatTokens, 'g'));\n  if (separators.length === 0 || !parts) {\n    throw new Error(\"Invalid date format.\");\n  }\n\n  // collect format functions used in the format\n  const partFormatters = parts.map(token => formatFns[token]);\n\n  // collect parse function keys used in the format\n  // iterate over parseFns' keys in order to keep the order of the keys.\n  const partParserKeys = Object.keys(parseFns).reduce((keys, key) => {\n    const token = parts.find(part => part[0] !== 'D' && part[0].toLowerCase() === key);\n    if (token) {\n      keys.push(key);\n    }\n    return keys;\n  }, []);\n\n  return knownFormats[format] = {\n    parser(dateStr, locale) {\n      const dateParts = dateStr.split(reNonDateParts).reduce((dtParts, part, index) => {\n        if (part.length > 0 && parts[index]) {\n          const token = parts[index][0];\n          if (token === 'M') {\n            dtParts.m = part;\n          } else if (token !== 'D') {\n            dtParts[token] = part;\n          }\n        }\n        return dtParts;\n      }, {});\n\n      // iterate over partParserkeys so that the parsing is made in the oder\n      // of year, month and day to prevent the day parser from correcting last\n      // day of month wrongly\n      return partParserKeys.reduce((origDate, key) => {\n        const newDate = parseFns[key](origDate, dateParts[key], locale);\n        // ingnore the part failed to parse\n        return isNaN(newDate) ? origDate : newDate;\n      }, today());\n    },\n    formatter(date, locale) {\n      let dateStr = partFormatters.reduce((str, fn, index) => {\n        return str += `${separators[index]}${fn(date, locale)}`;\n      }, '');\n      // separators' length is always parts' length + 1,\n      return dateStr += lastItemOf(separators);\n    },\n  };\n}\n\nexport function parseDate(dateStr, format, locale) {\n  if (dateStr instanceof Date || typeof dateStr === 'number') {\n    const date = stripTime(dateStr);\n    return isNaN(date) ? undefined : date;\n  }\n  if (!dateStr) {\n    return undefined;\n  }\n  if (dateStr === 'today') {\n    return today();\n  }\n\n  if (format && format.toValue) {\n    const date = format.toValue(dateStr, format, locale);\n    return isNaN(date) ? undefined : stripTime(date);\n  }\n\n  return parseFormatString(format).parser(dateStr, locale);\n}\n\nexport function formatDate(date, format, locale) {\n  if (isNaN(date) || (!date && date !== 0)) {\n    return '';\n  }\n\n  const dateObj = typeof date === 'number' ? new Date(date) : date;\n\n  if (format.toDisplay) {\n    return format.toDisplay(dateObj, format, locale);\n  }\n\n  return parseFormatString(format).formatter(dateObj, locale);\n}\n", "const range = document.createRange();\n\nexport function parseHTML(html) {\n  return range.createContextualFragment(html);\n}\n\nexport function getParent(el) {\n  return el.parentElement\n    || (el.parentNode instanceof ShadowRoot ? el.parentNode.host : undefined);\n}\n\nexport function isActiveElement(el) {\n  return el.getRootNode().activeElement === el;\n}\n\n// equivalent to jQuery's :visble\nexport function isVisible(el) {\n  return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function hideElement(el) {\n  if (el.style.display === 'none') {\n    return;\n  }\n  // back up the existing display setting in data-style-display\n  if (el.style.display) {\n    el.dataset.styleDisplay = el.style.display;\n  }\n  el.style.display = 'none';\n}\n\nexport function showElement(el) {\n  if (el.style.display !== 'none') {\n    return;\n  }\n  if (el.dataset.styleDisplay) {\n    // restore backed-up dispay property\n    el.style.display = el.dataset.styleDisplay;\n    delete el.dataset.styleDisplay;\n  } else {\n    el.style.display = '';\n  }\n}\n\nexport function emptyChildNodes(el) {\n  if (el.firstChild) {\n    el.removeChild(el.firstChild);\n    emptyChildNodes(el);\n  }\n}\n\nexport function replaceChildNodes(el, newChildNodes) {\n  emptyChildNodes(el);\n  if (newChildNodes instanceof DocumentFragment) {\n    el.appendChild(newChildNodes);\n  } else if (typeof newChildNodes === 'string') {\n    el.appendChild(parseHTML(newChildNodes));\n  } else if (typeof newChildNodes.forEach === 'function') {\n    newChildNodes.forEach((node) => {\n      el.appendChild(node);\n    });\n  }\n}\n", "const listenerRegistry = new WeakMap();\nconst {addEventListener, removeEventListener} = EventTarget.prototype;\n\n// Register event listeners to a key object\n// listeners: array of listener definitions;\n//   - each definition must be a flat array of event target and the arguments\n//     used to call addEventListener() on the target\nexport function registerListeners(keyObj, listeners) {\n  let registered = listenerRegistry.get(keyObj);\n  if (!registered) {\n    registered = [];\n    listenerRegistry.set(keyObj, registered);\n  }\n  listeners.forEach((listener) => {\n    addEventListener.call(...listener);\n    registered.push(listener);\n  });\n}\n\nexport function unregisterListeners(keyObj) {\n  let listeners = listenerRegistry.get(keyObj);\n  if (!listeners) {\n    return;\n  }\n  listeners.forEach((listener) => {\n    removeEventListener.call(...listener);\n  });\n  listenerRegistry.delete(keyObj);\n}\n\n// Event.composedPath() polyfill for Edge\n// based on https://gist.github.com/kleinfreund/e9787d73776c0e3750dcfcdc89f100ec\nif (!Event.prototype.composedPath) {\n  const getComposedPath = (node, path = []) => {\n    path.push(node);\n\n    let parent;\n    if (node.parentNode) {\n      parent = node.parentNode;\n    } else if (node.host) { // ShadowRoot\n      parent = node.host;\n    } else if (node.defaultView) {  // Document\n      parent = node.defaultView;\n    }\n    return parent ? getComposedPath(parent, path) : path;\n  };\n\n  Event.prototype.composedPath = function () {\n    return getComposedPath(this.target);\n  };\n}\n\nfunction findFromPath(path, criteria, currentTarget) {\n  const [node, ...rest] = path;\n  if (criteria(node)) {\n    return node;\n  }\n  if (node === currentTarget || node.tagName === 'HTML' || rest.length === 0) {\n    // stop when reaching currentTarget or <html>\n    return;\n  }\n  return findFromPath(rest, criteria, currentTarget);\n}\n\n// Search for the actual target of a delegated event\nexport function findElementInEventPath(ev, selector) {\n  const criteria = typeof selector === 'function'\n    ? selector\n    : el => el instanceof Element && el.matches(selector);\n  return findFromPath(ev.composedPath(), criteria, ev.currentTarget);\n}\n", "// default locales\nexport default {\n  en: {\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    today: \"Today\",\n    clear: \"Clear\",\n    titleFormat: \"MM y\"\n  }\n};\n", "// config options updatable by setOptions() and their default values\nexport default {\n  autohide: false,\n  beforeShowDay: null,\n  beforeShowDecade: null,\n  beforeShowMonth: null,\n  beforeShowYear: null,\n  clearButton: false,\n  dateDelimiter: ',',\n  datesDisabled: [],\n  daysOfWeekDisabled: [],\n  daysOfWeekHighlighted: [],\n  defaultViewDate: undefined, // placeholder, defaults to today() by the program\n  disableTouchKeyboard: false,\n  enableOnReadonly: true,\n  format: 'mm/dd/yyyy',\n  language: 'en',\n  maxDate: null,\n  maxNumberOfDates: 1,\n  maxView: 3,\n  minDate: null,\n  nextArrow: '\u00BB',\n  orientation: 'auto',\n  pickLevel: 0,\n  prevArrow: '\u00AB',\n  showDaysOfWeek: true,\n  showOnClick: true,\n  showOnFocus: true,\n  startView: 0,\n  title: '',\n  todayButton: false,\n  todayButtonMode: 0,\n  todayHighlight: false,\n  updateOnBlur: true,\n  weekNumbers: 0,\n  weekStart: 0,\n};\n", "import {pushUnique} from '../lib/utils.js';\nimport {\n  dateValue,\n  regularizeDate,\n  getIsoWeek,\n  getWesternTradWeek,\n  getMidEasternWeek,\n} from '../lib/date.js';\nimport {reFormatTokens, parseDate} from '../lib/date-format.js';\nimport {parseHTML} from '../lib/dom.js';\nimport defaultOptions from './defaultOptions.js';\n\nconst {\n  language: defaultLang,\n  format: defaultFormat,\n  weekStart: defaultWeekStart,\n} = defaultOptions;\n\n// Reducer function to filter out invalid day-of-week from the input\nfunction sanitizeDOW(dow, day) {\n  return dow.length < 6 && day >= 0 && day < 7\n    ? pushUnique(dow, day)\n    : dow;\n}\n\nfunction determineGetWeekMethod(numberingMode, weekStart) {\n  const methodId = numberingMode === 4\n    ? (weekStart === 6 ? 3 : !weekStart + 1)\n    : numberingMode;\n  switch (methodId) {\n    case 1:\n      return getIsoWeek;\n    case 2:\n      return getWesternTradWeek;\n    case 3:\n      return getMidEasternWeek;\n  }\n}\n\nfunction updateWeekStart(newValue, config, weekNumbers) {\n  config.weekStart = newValue;\n  config.weekEnd = (newValue + 6) % 7;\n  if (weekNumbers === 4) {\n    config.getWeekNumber = determineGetWeekMethod(4, newValue);\n  }\n  return newValue;\n}\n\n// validate input date. if invalid, fallback to the original value\nfunction validateDate(value, format, locale, origValue) {\n  const date = parseDate(value, format, locale);\n  return date !== undefined ? date : origValue;\n}\n\n// Validate viewId. if invalid, fallback to the original value\nfunction validateViewId(value, origValue, max = 3) {\n  const viewId = parseInt(value, 10);\n  return viewId >= 0 && viewId <= max ? viewId : origValue;\n}\n\nfunction replaceOptions(options, from, to, convert = undefined) {\n  if (from in options) {\n    if (!(to in options)) {\n      options[to] = convert ? convert(options[from]) : options[from];\n    }\n    delete options[from];\n  }\n}\n\n// Create Datepicker configuration to set\nexport default function processOptions(options, datepicker) {\n  const inOpts = Object.assign({}, options);\n  const config = {};\n  const locales = datepicker.constructor.locales;\n  const rangeEnd = !!datepicker.rangeSideIndex;\n  let {\n    datesDisabled,\n    format,\n    language,\n    locale,\n    maxDate,\n    maxView,\n    minDate,\n    pickLevel,\n    startView,\n    weekNumbers,\n    weekStart,\n  } = datepicker.config || {};\n\n  // for backword compatibility\n  replaceOptions(inOpts, 'calendarWeeks', 'weekNumbers', val => val ? 1 : 0);\n  replaceOptions(inOpts, 'clearBtn', 'clearButton');\n  replaceOptions(inOpts, 'todayBtn', 'todayButton');\n  replaceOptions(inOpts, 'todayBtnMode', 'todayButtonMode');\n\n  if (inOpts.language) {\n    let lang;\n    if (inOpts.language !== language) {\n      if (locales[inOpts.language]) {\n        lang = inOpts.language;\n      } else {\n        // Check if langauge + region tag can fallback to the one without\n        // region (e.g. fr-CA \u2192 fr)\n        lang = inOpts.language.split('-')[0];\n        if (!locales[lang]) {\n          lang = false;\n        }\n      }\n    }\n    delete inOpts.language;\n    if (lang) {\n      language = config.language = lang;\n\n      // update locale as well when updating language\n      const origLocale = locale || locales[defaultLang];\n      // use default language's properties for the fallback\n      locale = Object.assign({\n        format: defaultFormat,\n        weekStart: defaultWeekStart\n      }, locales[defaultLang]);\n      if (language !== defaultLang) {\n        Object.assign(locale, locales[language]);\n      }\n      config.locale = locale;\n      // if format and/or weekStart are the same as old locale's defaults,\n      // update them to new locale's defaults\n      if (format === origLocale.format) {\n        format = config.format = locale.format;\n      }\n      if (weekStart === origLocale.weekStart) {\n        weekStart = updateWeekStart(locale.weekStart, config, weekNumbers);\n      }\n    }\n  }\n\n  if (inOpts.format) {\n    const hasToDisplay = typeof inOpts.format.toDisplay === 'function';\n    const hasToValue = typeof inOpts.format.toValue === 'function';\n    const validFormatString = reFormatTokens.test(inOpts.format);\n    if ((hasToDisplay && hasToValue) || validFormatString) {\n      format = config.format = inOpts.format;\n    }\n    delete inOpts.format;\n  }\n\n  //*** pick level ***//\n  let newPickLevel = pickLevel;\n  if ('pickLevel' in inOpts) {\n    newPickLevel = validateViewId(inOpts.pickLevel, pickLevel, 2);\n    delete inOpts.pickLevel;\n  }\n  if (newPickLevel !== pickLevel) {\n    if (newPickLevel > pickLevel) {\n      // complement current minDate/madDate so that the existing range will be\n      // expanded to fit the new level later\n      if (!('minDate' in inOpts)) {\n        inOpts.minDate = minDate;\n      }\n      if (!('maxDate' in inOpts)) {\n        inOpts.maxDate = maxDate;\n      }\n    }\n    // complement datesDisabled so that it will be reset later\n    if (datesDisabled && !inOpts.datesDisabled) {\n      inOpts.datesDisabled = [];\n    }\n    pickLevel = config.pickLevel = newPickLevel;\n  }\n\n  //*** dates ***//\n  // while min and maxDate for \"no limit\" in the options are better to be null\n  // (especially when updating), the ones in the config have to be undefined\n  // because null is treated as 0 (= unix epoch) when comparing with time value\n  let minDt = minDate;\n  let maxDt = maxDate;\n  if ('minDate' in inOpts) {\n    const defaultMinDt = dateValue(0, 0, 1);\n    minDt = inOpts.minDate === null\n      ? defaultMinDt  // set 0000-01-01 to prevent negative values for year\n      : validateDate(inOpts.minDate, format, locale, minDt);\n    if (minDt !== defaultMinDt) {\n      minDt = regularizeDate(minDt, pickLevel, false);\n    }\n    delete inOpts.minDate;\n  }\n  if ('maxDate' in inOpts) {\n    maxDt = inOpts.maxDate === null\n      ? undefined\n      : validateDate(inOpts.maxDate, format, locale, maxDt);\n    if (maxDt !== undefined) {\n      maxDt = regularizeDate(maxDt, pickLevel, true);\n    }\n    delete inOpts.maxDate;\n  }\n  if (maxDt < minDt) {\n    minDate = config.minDate = maxDt;\n    maxDate = config.maxDate = minDt;\n  } else {\n    if (minDate !== minDt) {\n      minDate = config.minDate = minDt;\n    }\n    if (maxDate !== maxDt) {\n      maxDate = config.maxDate = maxDt;\n    }\n  }\n\n  if (inOpts.datesDisabled) {\n    const dtsDisabled = inOpts.datesDisabled;\n    if (typeof dtsDisabled === 'function') {\n      config.datesDisabled = null;\n      config.checkDisabled = (timeValue, viewId) => dtsDisabled(\n        new Date(timeValue),\n        viewId,\n        rangeEnd\n      );\n    } else {\n      const disabled = config.datesDisabled = dtsDisabled.reduce((dates, dt) => {\n        const date = parseDate(dt, format, locale);\n        return date !== undefined\n          ? pushUnique(dates, regularizeDate(date, pickLevel, rangeEnd))\n          : dates;\n      }, []);\n      config.checkDisabled = timeValue => disabled.includes(timeValue);\n    }\n    delete inOpts.datesDisabled;\n  }\n  if ('defaultViewDate' in inOpts) {\n    const viewDate = parseDate(inOpts.defaultViewDate, format, locale);\n    if (viewDate !== undefined) {\n      config.defaultViewDate = viewDate;\n    }\n    delete inOpts.defaultViewDate;\n  }\n\n  //*** days of week ***//\n  if ('weekStart' in inOpts) {\n    const wkStart = Number(inOpts.weekStart) % 7;\n    if (!isNaN(wkStart)) {\n      weekStart = updateWeekStart(wkStart, config, weekNumbers);\n    }\n    delete inOpts.weekStart;\n  }\n  if (inOpts.daysOfWeekDisabled) {\n    config.daysOfWeekDisabled = inOpts.daysOfWeekDisabled.reduce(sanitizeDOW, []);\n    delete inOpts.daysOfWeekDisabled;\n  }\n  if (inOpts.daysOfWeekHighlighted) {\n    config.daysOfWeekHighlighted = inOpts.daysOfWeekHighlighted.reduce(sanitizeDOW, []);\n    delete inOpts.daysOfWeekHighlighted;\n  }\n\n  //*** week numbers ***//\n  if ('weekNumbers' in inOpts) {\n    let method = inOpts.weekNumbers;\n    if (method) {\n      const getWeekNumber = typeof method === 'function'\n        ? (timeValue, startOfWeek) => method(new Date(timeValue), startOfWeek)\n        : determineGetWeekMethod((method = parseInt(method, 10)), weekStart);\n      if (getWeekNumber) {\n        weekNumbers = config.weekNumbers = method;\n        config.getWeekNumber = getWeekNumber;\n      }\n    } else {\n      weekNumbers = config.weekNumbers = 0;\n      config.getWeekNumber = null;\n    }\n    delete inOpts.weekNumbers;\n  }\n\n  //*** multi date ***//\n  if ('maxNumberOfDates' in inOpts) {\n    const maxNumberOfDates = parseInt(inOpts.maxNumberOfDates, 10);\n    if (maxNumberOfDates >= 0) {\n      config.maxNumberOfDates = maxNumberOfDates;\n      config.multidate = maxNumberOfDates !== 1;\n    }\n    delete inOpts.maxNumberOfDates;\n  }\n  if (inOpts.dateDelimiter) {\n    config.dateDelimiter = String(inOpts.dateDelimiter);\n    delete inOpts.dateDelimiter;\n  }\n\n  //*** view ***//\n  let newMaxView = maxView;\n  if ('maxView' in inOpts) {\n    newMaxView = validateViewId(inOpts.maxView, maxView);\n    delete inOpts.maxView;\n  }\n  // ensure max view >= pick level\n  newMaxView = pickLevel > newMaxView ? pickLevel : newMaxView;\n  if (newMaxView !== maxView) {\n    maxView = config.maxView = newMaxView;\n  }\n\n  let newStartView = startView;\n  if ('startView' in inOpts) {\n    newStartView = validateViewId(inOpts.startView, newStartView);\n    delete inOpts.startView;\n  }\n  // ensure pick level <= start view <= max view\n  if (newStartView < pickLevel) {\n    newStartView = pickLevel;\n  } else if (newStartView > maxView) {\n    newStartView = maxView;\n  }\n  if (newStartView !== startView) {\n    config.startView = newStartView;\n  }\n\n  //*** template ***//\n  if (inOpts.prevArrow) {\n    const prevArrow = parseHTML(inOpts.prevArrow);\n    if (prevArrow.childNodes.length > 0) {\n      config.prevArrow = prevArrow.childNodes;\n    }\n    delete inOpts.prevArrow;\n  }\n  if (inOpts.nextArrow) {\n    const nextArrow = parseHTML(inOpts.nextArrow);\n    if (nextArrow.childNodes.length > 0) {\n      config.nextArrow = nextArrow.childNodes;\n    }\n    delete inOpts.nextArrow;\n  }\n\n  //*** misc ***//\n  if ('disableTouchKeyboard' in inOpts) {\n    config.disableTouchKeyboard = 'ontouchstart' in document && !!inOpts.disableTouchKeyboard;\n    delete inOpts.disableTouchKeyboard;\n  }\n  if (inOpts.orientation) {\n    const orientation = inOpts.orientation.toLowerCase().split(/\\s+/g);\n    config.orientation = {\n      x: orientation.find(x => (x === 'left' || x === 'right')) || 'auto',\n      y: orientation.find(y => (y === 'top' || y === 'bottom')) || 'auto',\n    };\n    delete inOpts.orientation;\n  }\n  if ('todayButtonMode' in inOpts) {\n    switch(inOpts.todayButtonMode) {\n      case 0:\n      case 1:\n        config.todayButtonMode = inOpts.todayButtonMode;\n    }\n    delete inOpts.todayButtonMode;\n  }\n\n  //*** copy the rest ***//\n  Object.entries(inOpts).forEach(([key, value]) => {\n    if (value !== undefined && key in defaultOptions) {\n      config[key] = value;\n    }\n  });\n\n  return config;\n}\n", "const defaultShortcutKeys = {\n  show: {key: 'ArrowDown'},\n  hide: null,\n  toggle: {key: 'Escape'},\n  prevButton: {key: 'ArrowLeft', ctrlOrMetaKey: true},\n  nextButton: {key: 'ArrowRight', ctrlOrMetaKey: true},\n  viewSwitch: {key: 'ArrowUp', ctrlOrMetaKey: true},\n  clearButton: {key: 'Backspace', ctrlOrMetaKey: true},\n  todayButton: {key: '.', ctrlOrMetaKey: true},\n  exitEditMode: {key: 'ArrowDown', ctrlOrMetaKey: true},\n};\n\nexport default function createShortcutKeyConfig(options) {\n  return Object.keys(defaultShortcutKeys).reduce((keyDefs, shortcut) => {\n    const keyDef = options[shortcut] === undefined\n      ? defaultShortcutKeys[shortcut]\n      : options[shortcut];\n    const key = keyDef && keyDef.key;\n    if (!key || typeof key !== 'string') {\n      return keyDefs;\n    }\n\n    const normalizedDef = {\n      key,\n      ctrlOrMetaKey: !!(keyDef.ctrlOrMetaKey || keyDef.ctrlKey || keyDef.metaKey),\n    };\n    if (key.length > 1) {\n      normalizedDef.altKey = !!keyDef.altKey;\n      normalizedDef.shiftKey = !!keyDef.shiftKey;\n    }\n    keyDefs[shortcut] = normalizedDef;\n    return keyDefs;\n  }, {});\n}\n", "import {optimizeTemplateHTML} from '../../lib/utils.js';\n\nconst getButtons = buttonList => buttonList\n  .map(classes => `<button type=\"button\" class=\"%buttonClass% ${classes}\" tabindex=\"-1\"></button>`)\n  .join('');\n\nexport default optimizeTemplateHTML(`<div class=\"datepicker\">\n  <div class=\"datepicker-picker\">\n    <div class=\"datepicker-header\">\n      <div class=\"datepicker-title\"></div>\n      <div class=\"datepicker-controls\">\n        ${getButtons([\n          'prev-button prev-btn',\n          'view-switch',\n          'next-button next-btn',\n        ])}\n      </div>\n    </div>\n    <div class=\"datepicker-main\"></div>\n    <div class=\"datepicker-footer\">\n      <div class=\"datepicker-controls\">\n        ${getButtons([\n          'today-button today-btn',\n          'clear-button clear-btn',\n        ])}\n      </div>\n    </div>\n  </div>\n</div>`);\n", "import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nexport default optimizeTemplateHTML(`<div class=\"days\">\n  <div class=\"days-of-week\">${createTagRepeat('span', 7, {class: 'dow'})}</div>\n  <div class=\"datepicker-grid\">${createTagRepeat('span', 42)}</div>\n</div>`);\n", "import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nexport default optimizeTemplateHTML(`<div class=\"week-numbers calendar-weeks\">\n  <div class=\"days-of-week\"><span class=\"dow\"></span></div>\n  <div class=\"weeks\">${createTagRepeat('span', 6, {class: 'week'})}</div>\n</div>`);\n\n", "import {pushUnique} from '../../lib/utils.js';\nimport {parseHTML, replaceChildNodes} from '../../lib/dom.js';\n\n// Base class of the view classes\nexport default class View {\n  constructor(picker, config) {\n    Object.assign(this, config, {\n      picker,\n      element: parseHTML(`<div class=\"datepicker-view\"></div>`).firstChild,\n      selected: [],\n      isRangeEnd: !!picker.datepicker.rangeSideIndex,\n    });\n    this.init(this.picker.datepicker.config);\n  }\n\n  init(options) {\n    if ('pickLevel' in options) {\n      this.isMinView = this.id === options.pickLevel;\n    }\n    this.setOptions(options);\n    this.updateFocus();\n    this.updateSelection();\n  }\n\n  prepareForRender(switchLabel, prevButtonDisabled, nextButtonDisabled) {\n    // refresh disabled years on every render in order to clear the ones added\n    // by beforeShow hook at previous render\n    this.disabled = [];\n\n    const picker = this.picker;\n    picker.setViewSwitchLabel(switchLabel);\n    picker.setPrevButtonDisabled(prevButtonDisabled);\n    picker.setNextButtonDisabled(nextButtonDisabled);\n  }\n\n  setDisabled(date, classList) {\n    classList.add('disabled');\n    pushUnique(this.disabled, date);\n  }\n\n  // Execute beforeShow() callback and apply the result to the element\n  // args:\n  performBeforeHook(el, timeValue) {\n    let result = this.beforeShow(new Date(timeValue));\n    switch (typeof result) {\n      case 'boolean':\n        result = {enabled: result};\n        break;\n      case 'string':\n        result = {classes: result};\n    }\n\n    if (result) {\n      const classList = el.classList;\n      if (result.enabled === false) {\n        this.setDisabled(timeValue, classList);\n      }\n      if (result.classes) {\n        const extraClasses = result.classes.split(/\\s+/);\n        classList.add(...extraClasses);\n        if (extraClasses.includes('disabled')) {\n          this.setDisabled(timeValue, classList);\n        }\n      }\n      if (result.content) {\n        replaceChildNodes(el, result.content);\n      }\n    }\n  }\n\n  renderCell(el, content, cellVal, date, {selected, range}, outOfScope, extraClasses = []) {\n    el.textContent = content;\n    if (this.isMinView) {\n      el.dataset.date = date;\n    }\n\n    const classList = el.classList;\n    el.className = `datepicker-cell ${this.cellClass}`;\n    if (cellVal < this.first) {\n      classList.add('prev');\n    } else if (cellVal > this.last) {\n      classList.add('next');\n    }\n    classList.add(...extraClasses);\n    if (outOfScope || this.checkDisabled(date, this.id)) {\n      this.setDisabled(date, classList);\n    }\n    if (range) {\n      const [rangeStart, rangeEnd] = range;\n      if (cellVal > rangeStart && cellVal < rangeEnd) {\n        classList.add('range');\n      }\n      if (cellVal === rangeStart) {\n        classList.add('range-start');\n      }\n      if (cellVal === rangeEnd) {\n        classList.add('range-end');\n      }\n    }\n    if (selected.includes(cellVal)) {\n      classList.add('selected');\n    }\n    if (cellVal === this.focused) {\n      classList.add('focused');\n    }\n\n    if (this.beforeShow) {\n      this.performBeforeHook(el, date);\n    }\n  }\n\n  refreshCell(el, cellVal, selected, [rangeStart, rangeEnd]) {\n    const classList = el.classList;\n    classList.remove('range', 'range-start', 'range-end', 'selected', 'focused');\n    if (cellVal > rangeStart && cellVal < rangeEnd) {\n      classList.add('range');\n    }\n    if (cellVal === rangeStart) {\n      classList.add('range-start');\n    }\n    if (cellVal === rangeEnd) {\n      classList.add('range-end');\n    }\n    if (selected.includes(cellVal)) {\n      classList.add('selected');\n    }\n    if (cellVal === this.focused) {\n      classList.add('focused');\n    }\n  }\n\n  changeFocusedCell(cellIndex) {\n    this.grid.querySelectorAll('.focused').forEach((el) => {\n      el.classList.remove('focused');\n    });\n    this.grid.children[cellIndex].classList.add('focused');\n  }\n}\n", "import {today, dateValue, addDays, addWeeks, dayOfTheWeekOf} from '../../lib/date.js';\nimport {formatDate} from '../../lib/date-format.js';\nimport {parseHTML, showElement, hideElement} from '../../lib/dom.js';\nimport daysTemplate from '../templates/daysTemplate.js';\nimport weekNumbersTemplate from '../templates/weekNumbersTemplate.js';\nimport View from './View.js';\n\nexport default class DaysView extends View {\n  constructor(picker) {\n    super(picker, {\n      id: 0,\n      name: 'days',\n      cellClass: 'day',\n    });\n  }\n\n  init(options, onConstruction = true) {\n    if (onConstruction) {\n      const inner = parseHTML(daysTemplate).firstChild;\n      this.dow = inner.firstChild;\n      this.grid = inner.lastChild;\n      this.element.appendChild(inner);\n    }\n    super.init(options);\n  }\n\n  setOptions(options) {\n    let updateDOW;\n\n    if ('minDate' in options) {\n      this.minDate = options.minDate;\n    }\n    if ('maxDate' in options) {\n      this.maxDate = options.maxDate;\n    }\n    if (options.checkDisabled) {\n      this.checkDisabled = options.checkDisabled;\n    }\n    if (options.daysOfWeekDisabled) {\n      this.daysOfWeekDisabled = options.daysOfWeekDisabled;\n      updateDOW = true;\n    }\n    if (options.daysOfWeekHighlighted) {\n      this.daysOfWeekHighlighted = options.daysOfWeekHighlighted;\n    }\n    if ('todayHighlight' in options) {\n      this.todayHighlight = options.todayHighlight;\n    }\n    if ('weekStart' in options) {\n      this.weekStart = options.weekStart;\n      this.weekEnd = options.weekEnd;\n      updateDOW = true;\n    }\n    if (options.locale) {\n      const locale = this.locale = options.locale;\n      this.dayNames = locale.daysMin;\n      this.switchLabelFormat = locale.titleFormat;\n      updateDOW = true;\n    }\n    if ('beforeShowDay' in options) {\n      this.beforeShow = typeof options.beforeShowDay === 'function'\n        ? options.beforeShowDay\n        : undefined;\n    }\n\n    if ('weekNumbers' in options) {\n      if (options.weekNumbers && !this.weekNumbers) {\n        const weeksElem = parseHTML(weekNumbersTemplate).firstChild;\n        this.weekNumbers = {\n          element: weeksElem,\n          dow: weeksElem.firstChild,\n          weeks: weeksElem.lastChild,\n        };\n        this.element.insertBefore(weeksElem, this.element.firstChild);\n      } else if (this.weekNumbers && !options.weekNumbers) {\n        this.element.removeChild(this.weekNumbers.element);\n        this.weekNumbers = null;\n      }\n    }\n\n    if ('getWeekNumber' in options) {\n      this.getWeekNumber = options.getWeekNumber;\n    }\n\n    if ('showDaysOfWeek' in options) {\n      if (options.showDaysOfWeek) {\n        showElement(this.dow);\n        if (this.weekNumbers) {\n          showElement(this.weekNumbers.dow);\n        }\n      } else {\n        hideElement(this.dow);\n        if (this.weekNumbers) {\n          hideElement(this.weekNumbers.dow);\n        }\n      }\n    }\n\n    // update days-of-week when locale, daysOfweekDisabled or weekStart is changed\n    if (updateDOW) {\n      Array.from(this.dow.children).forEach((el, index) => {\n        const dow = (this.weekStart + index) % 7;\n        el.textContent = this.dayNames[dow];\n        el.className = this.daysOfWeekDisabled.includes(dow) ? 'dow disabled' : 'dow';\n      });\n    }\n  }\n\n  // Apply update on the focused date to view's settings\n  updateFocus() {\n    const viewDate = new Date(this.picker.viewDate);\n    const viewYear = viewDate.getFullYear();\n    const viewMonth = viewDate.getMonth();\n    const firstOfMonth = dateValue(viewYear, viewMonth, 1);\n    const start = dayOfTheWeekOf(firstOfMonth, this.weekStart, this.weekStart);\n\n    this.first = firstOfMonth;\n    this.last = dateValue(viewYear, viewMonth + 1, 0);\n    this.start = start;\n    this.focused = this.picker.viewDate;\n  }\n\n  // Apply update on the selected dates to view's settings\n  updateSelection() {\n    const {dates, rangepicker} = this.picker.datepicker;\n    this.selected = dates;\n    if (rangepicker) {\n      this.range = rangepicker.dates;\n    }\n  }\n\n   // Update the entire view UI\n  render() {\n    // update today marker on ever render\n    this.today = this.todayHighlight ? today() : undefined;\n\n    this.prepareForRender(\n      formatDate(this.focused, this.switchLabelFormat, this.locale),\n      this.first <= this.minDate,\n      this.last >= this.maxDate\n    );\n\n    if (this.weekNumbers) {\n      const weekStart = this.weekStart;\n      const startOfWeek = dayOfTheWeekOf(this.first, weekStart, weekStart);\n      Array.from(this.weekNumbers.weeks.children).forEach((el, index) => {\n        const dateOfWeekStart = addWeeks(startOfWeek, index);\n        el.textContent = this.getWeekNumber(dateOfWeekStart, weekStart);\n        if (index > 3) {\n          el.classList[dateOfWeekStart > this.last ? 'add' : 'remove']('next');\n        }\n      });\n    }\n    Array.from(this.grid.children).forEach((el, index) => {\n      const current = addDays(this.start, index);\n      const dateObj = new Date(current);\n      const day = dateObj.getDay();\n      const extraClasses = [];\n\n      if (this.today === current) {\n        extraClasses.push('today');\n      }\n      if (this.daysOfWeekHighlighted.includes(day)) {\n        extraClasses.push('highlighted');\n      }\n\n      this.renderCell(\n        el,\n        dateObj.getDate(),\n        current,\n        current,\n        this,\n        current < this.minDate\n          || current > this.maxDate\n          || this.daysOfWeekDisabled.includes(day),\n        extraClasses\n      );\n    });\n  }\n\n  // Update the view UI by applying the changes of selected and focused items\n  refresh() {\n    const range = this.range || [];\n    Array.from(this.grid.children).forEach((el) => {\n      this.refreshCell(el, Number(el.dataset.date), this.selected, range);\n    });\n  }\n\n  // Update the view UI by applying the change of focused item\n  refreshFocus() {\n    this.changeFocusedCell(Math.round((this.focused - this.start) / 86400000));\n  }\n}\n", "import {pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue, regularizeDate} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction computeMonthRange(range, thisYear) {\n  if (!range || !range[0] || !range[1]) {\n    return;\n  }\n\n  const [[startY, startM], [endY, endM]] = range;\n  if (startY > thisYear || endY < thisYear) {\n    return;\n  }\n  return [\n    startY === thisYear ? startM : -1,\n    endY === thisYear ? endM : 12,\n  ];\n}\n\nexport default class MonthsView extends View {\n  constructor(picker) {\n    super(picker, {\n      id: 1,\n      name: 'months',\n      cellClass: 'month',\n    });\n  }\n\n  init(options, onConstruction = true) {\n    if (onConstruction) {\n      this.grid = this.element;\n      this.element.classList.add('months', 'datepicker-grid');\n      this.grid.appendChild(parseHTML(createTagRepeat('span', 12, {'data-month': ix => ix})));\n      this.first = 0;\n      this.last = 11;\n    }\n    super.init(options);\n  }\n\n  setOptions(options) {\n    if (options.locale) {\n      this.monthNames = options.locale.monthsShort;\n    }\n    if ('minDate' in options) {\n      if (options.minDate === undefined) {\n        this.minYear = this.minMonth = this.minDate = undefined;\n      } else {\n        const minDateObj = new Date(options.minDate);\n        this.minYear = minDateObj.getFullYear();\n        this.minMonth = minDateObj.getMonth();\n        this.minDate = minDateObj.setDate(1);\n      }\n    }\n    if ('maxDate' in options) {\n      if (options.maxDate === undefined) {\n        this.maxYear = this.maxMonth = this.maxDate = undefined;\n      } else {\n        const maxDateObj = new Date(options.maxDate);\n        this.maxYear = maxDateObj.getFullYear();\n        this.maxMonth = maxDateObj.getMonth();\n        this.maxDate = dateValue(this.maxYear, this.maxMonth + 1, 0);\n      }\n    }\n    if (options.checkDisabled) {\n      this.checkDisabled = this.isMinView || options.datesDisabled === null\n        ? options.checkDisabled\n        : () => false;\n    }\n    if ('beforeShowMonth' in options) {\n      this.beforeShow = typeof options.beforeShowMonth === 'function'\n        ? options.beforeShowMonth\n        : undefined;\n    }\n  }\n\n  // Update view's settings to reflect the viewDate set on the picker\n  updateFocus() {\n    const viewDate = new Date(this.picker.viewDate);\n    this.year = viewDate.getFullYear();\n    this.focused = viewDate.getMonth();\n  }\n\n  // Update view's settings to reflect the selected dates\n  updateSelection() {\n    const {dates, rangepicker} = this.picker.datepicker;\n    this.selected = dates.reduce((selected, timeValue) => {\n      const date = new Date(timeValue);\n      const year = date.getFullYear();\n      const month = date.getMonth();\n      if (selected[year] === undefined) {\n        selected[year] = [month];\n      } else {\n        pushUnique(selected[year], month);\n      }\n      return selected;\n    }, {});\n    if (rangepicker && rangepicker.dates) {\n      this.range = rangepicker.dates.map(timeValue => {\n        const date = new Date(timeValue);\n        return isNaN(date) ? undefined : [date.getFullYear(), date.getMonth()];\n      });\n    }\n  }\n\n  // Update the entire view UI\n  render() {\n    this.prepareForRender(\n      this.year,\n      this.year <= this.minYear,\n      this.year >= this.maxYear\n    );\n\n    const selected = this.selected[this.year] || [];\n    const yrOutOfRange = this.year < this.minYear || this.year > this.maxYear;\n    const isMinYear = this.year === this.minYear;\n    const isMaxYear = this.year === this.maxYear;\n    const range = computeMonthRange(this.range, this.year);\n\n    Array.from(this.grid.children).forEach((el, index) => {\n      const date = regularizeDate(new Date(this.year, index, 1), 1, this.isRangeEnd);\n\n      this.renderCell(\n        el,\n        this.monthNames[index],\n        index,\n        date,\n        {selected, range},\n        yrOutOfRange\n          || isMinYear && index < this.minMonth\n          || isMaxYear && index > this.maxMonth\n      );\n    });\n  }\n\n  // Update the view UI by applying the changes of selected and focused items\n  refresh() {\n    const selected = this.selected[this.year] || [];\n    const range = computeMonthRange(this.range, this.year) || [];\n    Array.from(this.grid.children).forEach((el, index) => {\n      this.refreshCell(el, index, selected, range);\n    });\n  }\n\n  // Update the view UI by applying the change of focused item\n  refreshFocus() {\n    this.changeFocusedCell(this.focused);\n  }\n}", "import {pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue, regularizeDate, startOfYearPeriod} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction toTitleCase(word) {\n  return [...word].reduce((str, ch, ix) => str += ix ? ch : ch.toUpperCase(), '');\n}\n\n// Class representing the years and decades view elements\nexport default class YearsView extends View {\n  constructor(picker, config) {\n    super(picker, config);\n  }\n\n  init(options, onConstruction = true) {\n    if (onConstruction) {\n      this.navStep = this.step * 10;\n      this.beforeShowOption = `beforeShow${toTitleCase(this.cellClass)}`;\n      this.grid = this.element;\n      this.element.classList.add(this.name, 'datepicker-grid');\n      this.grid.appendChild(parseHTML(createTagRepeat('span', 12)));\n    }\n    super.init(options);\n  }\n\n  setOptions(options) {\n    if ('minDate' in options) {\n      if (options.minDate === undefined) {\n        this.minYear = this.minDate = undefined;\n      } else {\n        this.minYear = startOfYearPeriod(options.minDate, this.step);\n        this.minDate = dateValue(this.minYear, 0, 1);\n      }\n    }\n    if ('maxDate' in options) {\n      if (options.maxDate === undefined) {\n        this.maxYear = this.maxDate = undefined;\n      } else {\n        this.maxYear = startOfYearPeriod(options.maxDate, this.step);\n        this.maxDate = dateValue(this.maxYear, 11, 31);\n      }\n    }\n    if (options.checkDisabled) {\n      this.checkDisabled = this.isMinView || options.datesDisabled === null\n        ? options.checkDisabled\n        : () => false;\n    }\n    if (this.beforeShowOption in options) {\n      const beforeShow = options[this.beforeShowOption];\n      this.beforeShow = typeof beforeShow === 'function' ? beforeShow : undefined;\n    }\n  }\n\n  // Update view's settings to reflect the viewDate set on the picker\n  updateFocus() {\n    const viewDate = new Date(this.picker.viewDate);\n    const first = startOfYearPeriod(viewDate, this.navStep);\n    const last = first + 9 * this.step;\n\n    this.first = first;\n    this.last = last;\n    this.start = first - this.step;\n    this.focused = startOfYearPeriod(viewDate, this.step);\n  }\n\n  // Update view's settings to reflect the selected dates\n  updateSelection() {\n    const {dates, rangepicker} = this.picker.datepicker;\n    this.selected = dates.reduce((years, timeValue) => {\n      return pushUnique(years, startOfYearPeriod(timeValue, this.step));\n    }, []);\n    if (rangepicker && rangepicker.dates) {\n      this.range = rangepicker.dates.map(timeValue => {\n        if (timeValue !== undefined) {\n          return startOfYearPeriod(timeValue, this.step);\n        }\n      });\n    }\n  }\n\n  // Update the entire view UI\n  render() {\n    this.prepareForRender(\n      `${this.first}-${this.last}`,\n      this.first <= this.minYear,\n      this.last >= this.maxYear\n    );\n\n    Array.from(this.grid.children).forEach((el, index) => {\n      const current = this.start + (index * this.step);\n      const date = regularizeDate(new Date(current, 0, 1), 2, this.isRangeEnd);\n\n      el.dataset.year = current;\n      this.renderCell(\n        el,\n        current,\n        current,\n        date,\n        this,\n        current < this.minYear || current > this.maxYear\n      );\n    });\n  }\n\n  // Update the view UI by applying the changes of selected and focused items\n  refresh() {\n    const range = this.range || [];\n    Array.from(this.grid.children).forEach((el) => {\n      this.refreshCell(el, Number(el.textContent), this.selected, range);\n    });\n  }\n\n  // Update the view UI by applying the change of focused item\n  refreshFocus() {\n    this.changeFocusedCell(Math.round((this.focused - this.start) / this.step));\n  }\n}\n", "import {limitToRange} from '../lib/utils.js';\nimport {today, addMonths, addYears} from '../lib/date.js';\nimport {isActiveElement} from '../lib/dom.js';\n\nexport function triggerDatepickerEvent(datepicker, type) {\n  const options = {\n    bubbles: true,\n    cancelable: true,\n    detail: {\n      date: datepicker.getDate(),\n      viewDate: new Date(datepicker.picker.viewDate),\n      viewId: datepicker.picker.currentView.id,\n      datepicker,\n    },\n  };\n  datepicker.element.dispatchEvent(new CustomEvent(type, options));\n}\n\n// direction: -1 (to previous), 1 (to next)\nexport function goToPrevOrNext(datepicker, direction) {\n  const {config, picker} = datepicker;\n  const {currentView, viewDate} = picker;\n  let newViewDate;\n  switch (currentView.id) {\n    case 0:\n      newViewDate = addMonths(viewDate, direction);\n      break;\n    case 1:\n      newViewDate = addYears(viewDate, direction);\n      break;\n    default:\n      newViewDate = addYears(viewDate, direction * currentView.navStep);\n  }\n  newViewDate = limitToRange(newViewDate, config.minDate, config.maxDate);\n  picker.changeFocus(newViewDate).render();\n}\n\nexport function switchView(datepicker) {\n  const viewId = datepicker.picker.currentView.id;\n  if (viewId === datepicker.config.maxView) {\n    return;\n  }\n  datepicker.picker.changeView(viewId + 1).render();\n}\n\nexport function clearSelection(datepicker) {\n  datepicker.setDate({clear: true});\n}\n\nexport function goToOrSelectToday(datepicker) {\n  const currentDate = today();\n  if (datepicker.config.todayButtonMode === 1) {\n    datepicker.setDate(currentDate, {forceRefresh: true, viewDate: currentDate});\n  } else {\n    datepicker.setFocusedDate(currentDate, true);\n  }\n}\n\nexport function unfocus(datepicker) {\n  const onBlur = () => {\n    if (datepicker.config.updateOnBlur) {\n      datepicker.update({revert: true});\n    } else {\n      datepicker.refresh('input');\n    }\n    datepicker.hide();\n  };\n  const element = datepicker.element;\n\n  if (isActiveElement(element)) {\n    element.addEventListener('blur', onBlur, {once: true});\n  } else {\n    onBlur();\n  }\n}\n", "import {addMonths, addYears} from '../lib/date.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {goToPrevOrNext, switchView} from './functions.js';\n\nfunction goToSelectedMonthOrYear(datepicker, selection) {\n  const picker = datepicker.picker;\n  const viewDate = new Date(picker.viewDate);\n  const viewId = picker.currentView.id;\n  const newDate = viewId === 1\n    ? addMonths(viewDate, selection - viewDate.getMonth())\n    : addYears(viewDate, selection - viewDate.getFullYear());\n\n  picker.changeFocus(newDate).changeView(viewId - 1).render();\n}\n\nexport function onClickViewSwitch(datepicker) {\n  switchView(datepicker);\n}\n\nexport function onClickPrevButton(datepicker) {\n  goToPrevOrNext(datepicker, -1);\n}\n\nexport function onClickNextButton(datepicker) {\n  goToPrevOrNext(datepicker, 1);\n}\n\n// For the picker's main block to delegete the events from `datepicker-cell`s\nexport function onClickView(datepicker, ev) {\n  const target = findElementInEventPath(ev, '.datepicker-cell');\n  if (!target || target.classList.contains('disabled')) {\n    return;\n  }\n\n  const {id, isMinView} = datepicker.picker.currentView;\n  const data = target.dataset;\n  if (isMinView) {\n    datepicker.setDate(Number(data.date));\n  } else if (id === 1) {\n    goToSelectedMonthOrYear(datepicker, Number(data.month));\n  } else {\n    goToSelectedMonthOrYear(datepicker, Number(data.year));\n  }\n}\n\nexport function onMousedownPicker(ev) {\n  ev.preventDefault();\n}\n", "import {lastItemOf, isInRange, limitToRange} from '../lib/utils.js';\nimport {today, regularizeDate} from '../lib/date.js';\nimport {\n  parseHTML,\n  getParent,\n  showElement,\n  hideElement,\n  emptyChildNodes,\n} from '../lib/dom.js';\nimport {registerListeners} from '../lib/event.js';\nimport pickerTemplate from './templates/pickerTemplate.js';\nimport DaysView from './views/DaysView.js';\nimport MonthsView from './views/MonthsView.js';\nimport YearsView from './views/YearsView.js';\nimport {\n  triggerDatepickerEvent,\n  clearSelection,\n  goToOrSelectToday,\n} from '../events/functions.js';\nimport {\n  onClickViewSwitch,\n  onClickPrevButton,\n  onClickNextButton,\n  onClickView,\n  onMousedownPicker,\n} from '../events/pickerListeners.js';\n\nconst orientClasses = ['left', 'top', 'right', 'bottom'].reduce((obj, key) => {\n  obj[key] = `datepicker-orient-${key}`;\n  return obj;\n}, {});\nconst toPx = num => num ? `${num}px` : num;\n\nfunction processPickerOptions(picker, options) {\n  if ('title' in options) {\n    if (options.title) {\n      picker.controls.title.textContent = options.title;\n      showElement(picker.controls.title);\n    } else {\n      picker.controls.title.textContent = '';\n      hideElement(picker.controls.title);\n    }\n  }\n  if (options.prevArrow) {\n    const prevButton = picker.controls.prevButton;\n    emptyChildNodes(prevButton);\n    options.prevArrow.forEach((node) => {\n      prevButton.appendChild(node.cloneNode(true));\n    });\n  }\n  if (options.nextArrow) {\n    const nextButton = picker.controls.nextButton;\n    emptyChildNodes(nextButton);\n    options.nextArrow.forEach((node) => {\n      nextButton.appendChild(node.cloneNode(true));\n    });\n  }\n  if (options.locale) {\n    picker.controls.todayButton.textContent = options.locale.today;\n    picker.controls.clearButton.textContent = options.locale.clear;\n  }\n  if ('todayButton' in options) {\n    if (options.todayButton) {\n      showElement(picker.controls.todayButton);\n    } else {\n      hideElement(picker.controls.todayButton);\n    }\n  }\n  if ('minDate' in options || 'maxDate' in options) {\n    const {minDate, maxDate} = picker.datepicker.config;\n    picker.controls.todayButton.disabled = !isInRange(today(), minDate, maxDate);\n  }\n  if ('clearButton' in options) {\n    if (options.clearButton) {\n      showElement(picker.controls.clearButton);\n    } else {\n      hideElement(picker.controls.clearButton);\n    }\n  }\n}\n\n// Compute view date to reset, which will be...\n// - the last item of the selected dates or defaultViewDate if no selection\n// - limitted to minDate or maxDate if it exceeds the range\nfunction computeResetViewDate(datepicker) {\n  const {dates, config, rangeSideIndex} = datepicker;\n  const viewDate = dates.length > 0\n    ? lastItemOf(dates)\n    : regularizeDate(config.defaultViewDate, config.pickLevel, rangeSideIndex);\n  return limitToRange(viewDate, config.minDate, config.maxDate);\n}\n\n// Change current view's view date\nfunction setViewDate(picker, newDate) {\n  if (!('_oldViewDate' in picker) && newDate !== picker.viewDate) {\n    picker._oldViewDate = picker.viewDate;\n  }\n  picker.viewDate = newDate;\n\n  // return whether the new date is in different period on time from the one\n  // displayed in the current view\n  // when true, the view needs to be re-rendered on the next UI refresh.\n  const {id, year, first, last} = picker.currentView;\n  const viewYear = new Date(newDate).getFullYear();\n  switch (id) {\n    case 0:\n      return newDate < first || newDate > last;\n    case 1:\n      return viewYear !== year;\n    default:\n      return viewYear < first || viewYear > last;\n  }\n}\n\nfunction getTextDirection(el) {\n  return window.getComputedStyle(el).direction;\n}\n\n// find the closet scrollable ancestor elemnt under the body\nfunction findScrollParents(el) {\n  const parent = getParent(el);\n  if (parent === document.body || !parent) {\n    return;\n  }\n\n  // checking overflow only is enough because computed overflow cannot be\n  // visible or a combination of visible and other when either axis is set\n  // to other than visible.\n  // (Setting one axis to other than 'visible' while the other is 'visible'\n  // results in the other axis turning to 'auto')\n  return window.getComputedStyle(parent).overflow !== 'visible'\n    ? parent\n    : findScrollParents(parent);\n}\n\n// Class representing the picker UI\nexport default class Picker {\n  constructor(datepicker) {\n    const {config, inputField} = this.datepicker = datepicker;\n\n    const template = pickerTemplate.replace(/%buttonClass%/g, config.buttonClass);\n    const element = this.element = parseHTML(template).firstChild;\n    const [header, main, footer] = element.firstChild.children;\n    const title = header.firstElementChild;\n    const [prevButton, viewSwitch, nextButton] = header.lastElementChild.children;\n    const [todayButton, clearButton] = footer.firstChild.children;\n    const controls = {\n      title,\n      prevButton,\n      viewSwitch,\n      nextButton,\n      todayButton,\n      clearButton,\n    };\n    this.main = main;\n    this.controls = controls;\n\n    const elementClass = inputField ? 'dropdown' : 'inline';\n    element.classList.add(`datepicker-${elementClass}`);\n\n    processPickerOptions(this, config);\n    this.viewDate = computeResetViewDate(datepicker);\n\n    // set up event listeners\n    registerListeners(datepicker, [\n      [element, 'mousedown', onMousedownPicker],\n      [main, 'click', onClickView.bind(null, datepicker)],\n      [controls.viewSwitch, 'click', onClickViewSwitch.bind(null, datepicker)],\n      [controls.prevButton, 'click', onClickPrevButton.bind(null, datepicker)],\n      [controls.nextButton, 'click', onClickNextButton.bind(null, datepicker)],\n      [controls.todayButton, 'click', goToOrSelectToday.bind(null, datepicker)],\n      [controls.clearButton, 'click', clearSelection.bind(null, datepicker)],\n    ]);\n\n    // set up views\n    this.views = [\n      new DaysView(this),\n      new MonthsView(this),\n      new YearsView(this, {id: 2, name: 'years', cellClass: 'year', step: 1}),\n      new YearsView(this, {id: 3, name: 'decades', cellClass: 'decade', step: 10}),\n    ];\n    this.currentView = this.views[config.startView];\n\n    this.currentView.render();\n    this.main.appendChild(this.currentView.element);\n    if (config.container) {\n      config.container.appendChild(this.element);\n    } else {\n      inputField.after(this.element);\n    }\n  }\n\n  setOptions(options) {\n    processPickerOptions(this, options);\n    this.views.forEach((view) => {\n      view.init(options, false);\n    });\n    this.currentView.render();\n  }\n\n  detach() {\n    this.element.remove();\n  }\n\n  show() {\n    if (this.active) {\n      return;\n    }\n\n    const {datepicker, element} = this;\n    const inputField = datepicker.inputField;\n    if (inputField) {\n      // ensure picker's direction matches input's\n      const inputDirection = getTextDirection(inputField);\n      if (inputDirection !== getTextDirection(getParent(element))) {\n        element.dir = inputDirection;\n      } else if (element.dir) {\n        element.removeAttribute('dir');\n      }\n\n      // Determine the picker's position first to prevent `orientation: 'auto'`\n      // from being miscalculated to 'bottom' after the picker temporarily\n      // shown below the input field expands the document height if the field\n      // is at the bottom edge of the document\n      this.place();\n      element.classList.add('active');\n\n      if (datepicker.config.disableTouchKeyboard) {\n        inputField.blur();\n      }\n    } else {\n      element.classList.add('active');\n    }\n    this.active = true;\n    triggerDatepickerEvent(datepicker, 'show');\n  }\n\n  hide() {\n    if (!this.active) {\n      return;\n    }\n    this.datepicker.exitEditMode();\n    this.element.classList.remove('active');\n    this.active = false;\n    triggerDatepickerEvent(this.datepicker, 'hide');\n  }\n\n  place() {\n    const {classList, style} = this.element;\n    // temporarily display the picker to get its size and offset parent\n    style.display = 'block';\n\n    const {\n      width: calendarWidth,\n      height: calendarHeight,\n    } = this.element.getBoundingClientRect();\n    const offsetParent = this.element.offsetParent;\n    // turn the picker back to hidden so that the position is determined with\n    // the state before it is shown.\n    style.display = '';\n\n    const {config, inputField} = this.datepicker;\n    const {\n      left: inputLeft,\n      top: inputTop,\n      right: inputRight,\n      bottom: inputBottom,\n      width: inputWidth,\n      height: inputHeight\n    } = inputField.getBoundingClientRect();\n    let {x: orientX, y: orientY} = config.orientation;\n    let left = inputLeft;\n    let top = inputTop;\n\n    // caliculate offsetLeft/Top of inputField\n    if (offsetParent === document.body || !offsetParent) {\n      left += window.scrollX;\n      top += window.scrollY;\n    } else {\n      const offsetParentRect = offsetParent.getBoundingClientRect();\n      left -= offsetParentRect.left - offsetParent.scrollLeft;\n      top -= offsetParentRect.top - offsetParent.scrollTop;\n    }\n\n    // caliculate the boundaries of the visible area that contains inputField\n    const scrollParent = findScrollParents(inputField);\n    let scrollAreaLeft = 0;\n    let scrollAreaTop = 0;\n    let {\n      clientWidth: scrollAreaRight,\n      clientHeight: scrollAreaBottom,\n    } = document.documentElement;\n\n    if (scrollParent) {\n      const scrollParentRect = scrollParent.getBoundingClientRect();\n      if (scrollParentRect.top > 0) {\n        scrollAreaTop = scrollParentRect.top;\n      }\n      if (scrollParentRect.left > 0) {\n        scrollAreaLeft = scrollParentRect.left;\n      }\n      if (scrollParentRect.right < scrollAreaRight) {\n        scrollAreaRight = scrollParentRect.right;\n      }\n      if (scrollParentRect.bottom < scrollAreaBottom) {\n        scrollAreaBottom = scrollParentRect.bottom;\n      }\n    }\n\n    // determine the horizontal orientation and left position\n    let adjustment = 0;\n    if (orientX === 'auto') {\n      if (inputLeft < scrollAreaLeft) {\n        orientX = 'left';\n        adjustment = scrollAreaLeft - inputLeft;\n      } else if (inputLeft + calendarWidth > scrollAreaRight) {\n        orientX = 'right';\n        if (scrollAreaRight < inputRight) {\n          adjustment = scrollAreaRight - inputRight;\n        }\n      } else if (getTextDirection(inputField) === 'rtl') {\n        orientX = inputRight - calendarWidth < scrollAreaLeft ? 'left' : 'right';\n      } else {\n        orientX = 'left';\n      }\n    }\n    if (orientX === 'right') {\n      left += inputWidth - calendarWidth;\n    }\n    left += adjustment;\n\n    // determine the vertical orientation and top position\n    if (orientY === 'auto') {\n      if (inputTop - calendarHeight > scrollAreaTop) {\n        orientY = inputBottom + calendarHeight > scrollAreaBottom ? 'top' : 'bottom';\n      } else {\n        orientY = 'bottom';\n      }\n    }\n    if (orientY === 'top') {\n      top -= calendarHeight;\n    } else {\n      top += inputHeight;\n    }\n\n    classList.remove(...Object.values(orientClasses));\n    classList.add(orientClasses[orientX], orientClasses[orientY]);\n\n    style.left = toPx(left);\n    style.top = toPx(top);\n  }\n\n  setViewSwitchLabel(labelText) {\n    this.controls.viewSwitch.textContent = labelText;\n  }\n\n  setPrevButtonDisabled(disabled) {\n    this.controls.prevButton.disabled = disabled;\n  }\n\n  setNextButtonDisabled(disabled) {\n    this.controls.nextButton.disabled = disabled;\n  }\n\n  changeView(viewId) {\n    const currentView = this.currentView;\n    if (viewId !== currentView.id) {\n      if (!this._oldView) {\n        this._oldView = currentView;\n      }\n      this.currentView = this.views[viewId];\n      this._renderMethod = 'render';\n    }\n    return this;\n  }\n\n  // Change the focused date (view date)\n  changeFocus(newViewDate) {\n    this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refreshFocus';\n    this.views.forEach((view) => {\n      view.updateFocus();\n    });\n    return this;\n  }\n\n  // Apply the change of the selected dates\n  update(viewDate = undefined) {\n    const newViewDate = viewDate === undefined\n      ? computeResetViewDate(this.datepicker)\n      : viewDate;\n    this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refresh';\n    this.views.forEach((view) => {\n      view.updateFocus();\n      view.updateSelection();\n    });\n    return this;\n  }\n\n  // Refresh the picker UI\n  render(quickRender = true) {\n    const {currentView, datepicker, _oldView: oldView} = this;\n    const oldViewDate = new Date(this._oldViewDate);\n    const renderMethod = (quickRender && this._renderMethod) || 'render';\n    delete this._oldView;\n    delete this._oldViewDate;\n    delete this._renderMethod;\n\n    currentView[renderMethod]();\n    if (oldView) {\n      this.main.replaceChild(currentView.element, oldView.element);\n      triggerDatepickerEvent(datepicker, 'changeView');\n    }\n    if (!isNaN(oldViewDate)) {\n      const newViewDate = new Date(this.viewDate);\n      if (newViewDate.getFullYear() !== oldViewDate.getFullYear()) {\n        triggerDatepickerEvent(datepicker, 'changeYear');\n      }\n      if (newViewDate.getMonth() !== oldViewDate.getMonth()) {\n        triggerDatepickerEvent(datepicker, 'changeMonth');\n      }\n    }\n  }\n}\n", "import {isInRange} from '../lib/utils.js';\nimport {isActiveElement} from '../lib/dom.js';\nimport {addDays, addMonths, addYears} from '../lib/date.js';\nimport {\n  goToPrevOrNext,\n  switchView,\n  clearSelection,\n  goToOrSelectToday,\n  unfocus,\n} from './functions.js';\n\n// Find the closest date that doesn't meet the condition for unavailable date\n// Returns undefined if no available date is found\n// addFn: function to calculate the next date\n//   - args: time value, amount\n// increase: amount to pass to addFn\n// testFn: function to test the unavailability of the date\n//   - args: time value; return: true if unavailable\nfunction findNextAvailableOne(date, addFn, increase, testFn, min, max) {\n  if (!isInRange(date, min, max)) {\n    return;\n  }\n  if (testFn(date)) {\n    const newDate = addFn(date, increase);\n    return findNextAvailableOne(newDate, addFn, increase, testFn, min, max);\n  }\n  return date;\n}\n\n// direction: -1 (left/up), 1 (right/down)\n// vertical: true for up/down, false for left/right\nfunction moveByArrowKey(datepicker, direction, vertical) {\n  const picker = datepicker.picker;\n  const currentView = picker.currentView;\n  const step = currentView.step || 1;\n  let viewDate = picker.viewDate;\n  let addFn;\n  switch (currentView.id) {\n    case 0:\n      viewDate = addDays(viewDate, vertical ? direction * 7 : direction);\n      addFn = addDays;\n      break;\n    case 1:\n      viewDate = addMonths(viewDate, vertical ? direction * 4 : direction);\n      addFn = addMonths;\n      break;\n    default:\n      viewDate = addYears(viewDate, direction * (vertical ? 4 : 1) * step);\n      addFn = addYears;\n  }\n  viewDate = findNextAvailableOne(\n    viewDate,\n    addFn,\n    direction < 0 ? -step : step,\n    (date) => currentView.disabled.includes(date),\n    currentView.minDate,\n    currentView.maxDate\n  );\n  if (viewDate !== undefined) {\n    picker.changeFocus(viewDate).render();\n  }\n}\n\nexport function onKeydown(datepicker, ev) {\n  const {config, picker, editMode} = datepicker;\n  const active = picker.active;\n  const {key, altKey, shiftKey} = ev;\n  const ctrlOrMetaKey = ev.ctrlKey || ev.metaKey;\n  const cancelEvent = () => {\n    ev.preventDefault();\n    ev.stopPropagation();\n  };\n\n  // tab/enter keys should not be taken by shortcut keys\n  if (key === 'Tab') {\n    unfocus(datepicker);\n    return;\n  }\n  if (key === 'Enter') {\n    if (!active) {\n      datepicker.update();\n    } else if (editMode) {\n      datepicker.exitEditMode({update: true, autohide: config.autohide});\n    } else {\n      const currentView = picker.currentView;\n      if (currentView.isMinView) {\n        datepicker.setDate(picker.viewDate);\n      } else {\n        picker.changeView(currentView.id - 1).render();\n        cancelEvent();\n      }\n    }\n    return;\n  }\n\n  const shortcutKeys = config.shortcutKeys;\n  const keyInfo = {key, ctrlOrMetaKey, altKey, shiftKey};\n  const shortcut = Object.keys(shortcutKeys).find((item) => {\n    const keyDef = shortcutKeys[item];\n    return !Object.keys(keyDef).find(prop => keyDef[prop] !== keyInfo[prop]);\n  });\n  if (shortcut) {\n    let action;\n    if (shortcut === 'toggle') {\n      action = shortcut;\n    } else if (editMode) {\n      if (shortcut === 'exitEditMode') {\n        action = shortcut;\n      }\n    } else if (active) {\n      if (shortcut === 'hide') {\n        action = shortcut;\n      } else if (shortcut === 'prevButton') {\n        action = [goToPrevOrNext, [datepicker, -1]];\n      } else if (shortcut === 'nextButton') {\n        action = [goToPrevOrNext, [datepicker, 1]];\n      } else if (shortcut === 'viewSwitch') {\n        action = [switchView, [datepicker]];\n      } else if (config.clearButton && shortcut === 'clearButton') {\n        action = [clearSelection, [datepicker]];\n      } else if (config.todayButton && shortcut === 'todayButton') {\n        action = [goToOrSelectToday, [datepicker]];\n      }\n    } else if (shortcut === 'show') {\n      action = shortcut;\n    }\n    if (action) {\n      if (Array.isArray(action)) {\n        action[0].apply(null, action[1]);\n      } else {\n        datepicker[action]();\n      }\n      cancelEvent();\n      return;\n    }\n  }\n\n  // perform as a regular <input> when picker in hidden or in edit mode\n  if (!active || editMode) {\n    return;\n  }\n\n  const handleArrowKeyPress = (direction, vertical) => {\n    if (shiftKey || ctrlOrMetaKey || altKey) {\n      datepicker.enterEditMode();\n    } else {\n      moveByArrowKey(datepicker, direction, vertical);\n      ev.preventDefault();\n    }\n  };\n\n  if (key === 'ArrowLeft') {\n    handleArrowKeyPress(-1, false);\n  } else if (key === 'ArrowRight') {\n    handleArrowKeyPress(1, false);\n  } else if (key === 'ArrowUp') {\n    handleArrowKeyPress(-1, true);\n  } else if (key === 'ArrowDown') {\n    handleArrowKeyPress(1, true);\n  } else if (\n    key === 'Backspace'\n    || key === 'Delete'\n      // When autofill is performed, Chromium-based browsers trigger fake\n      // keydown/keyup events that don't have the `key` property (on Edge,\n      // keyup only) in addition to the input event. Therefore, we need to\n      // check the existence of `key`'s value before checking the length.\n      // (issue #144)\n    || (key && key.length === 1 && !ctrlOrMetaKey)\n  ) {\n    datepicker.enterEditMode();\n  }\n}\n\nexport function onFocus(datepicker) {\n  if (datepicker.config.showOnFocus && !datepicker._showing) {\n    datepicker.show();\n  }\n}\n\n// for the prevention for entering edit mode while getting focus on click\nexport function onMousedown(datepicker, ev) {\n  const el = ev.target;\n  if (datepicker.picker.active || datepicker.config.showOnClick) {\n    el._active = isActiveElement(el);\n    el._clicking = setTimeout(() => {\n      delete el._active;\n      delete el._clicking;\n    }, 2000);\n  }\n}\n\nexport function onClickInput(datepicker, ev) {\n  const el = ev.target;\n  if (!el._clicking) {\n    return;\n  }\n  clearTimeout(el._clicking);\n  delete el._clicking;\n\n  if (el._active) {\n    datepicker.enterEditMode();\n  }\n  delete el._active;\n\n  if (datepicker.config.showOnClick) {\n    datepicker.show();\n  }\n}\n\nexport function onPaste(datepicker, ev) {\n  if (ev.clipboardData.types.includes('text/plain')) {\n    datepicker.enterEditMode();\n  }\n}\n", "import {isActiveElement} from '../lib/dom.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {unfocus} from './functions.js';\n\n// for the `document` to delegate the events from outside the picker/input field\nexport function onClickOutside(datepicker, ev) {\n  const {element, picker} = datepicker;\n  // check both picker's and input's activeness to make updateOnBlur work in\n  // the cases where...\n  // - picker is hidden by ESC key press \u2192 input stays focused\n  // - input is unfocused by closing mobile keyboard \u2192 piker is kept shown\n  if (!picker.active && !isActiveElement(element)) {\n    return;\n  }\n  const pickerElem = picker.element;\n  if (findElementInEventPath(ev, el => el === element || el === pickerElem)) {\n    return;\n  }\n  unfocus(datepicker);\n}\n", "import {lastItemOf, stringToArray, isInRange} from './lib/utils.js';\nimport {today, regularizeDate} from './lib/date.js';\nimport {parseDate, formatDate} from './lib/date-format.js';\nimport {isActiveElement} from './lib/dom.js';\nimport {registerListeners, unregisterListeners} from './lib/event.js';\nimport locales from './i18n/base-locales.js';\nimport defaultOptions from './options/defaultOptions.js';\nimport processOptions from './options/processOptions.js';\nimport createShortcutKeyConfig from './options/shortcutKeys.js';\nimport Picker from './picker/Picker.js';\nimport {triggerDatepickerEvent} from './events/functions.js';\nimport {\n  onKeydown,\n  onFocus,\n  onMousedown,\n  onClickInput,\n  onPaste,\n} from './events/elementListeners.js';\nimport {onClickOutside} from './events/otherListeners.js';\n\nfunction stringifyDates(dates, config) {\n  return dates\n    .map(dt => formatDate(dt, config.format, config.locale))\n    .join(config.dateDelimiter);\n}\n\n// parse input dates and create an array of time values for selection\n// returns undefined if there are no valid dates in inputDates\n// when origDates (current selection) is passed, the function works to mix\n// the input dates into the current selection\nfunction processInputDates(datepicker, inputDates, clear = false) {\n  if (inputDates.length === 0) {\n    // empty input is considered valid unless origiDates is passed\n    return clear ? [] : undefined;\n  }\n\n  const {config, dates: origDates, rangeSideIndex} = datepicker;\n  const {pickLevel, maxNumberOfDates} = config;\n  let newDates = inputDates.reduce((dates, dt) => {\n    let date = parseDate(dt, config.format, config.locale);\n    if (date === undefined) {\n      return dates;\n    }\n    // adjust to 1st of the month/Jan 1st of the year\n    // or to the last day of the monh/Dec 31st of the year if the datepicker\n    // is the range-end picker of a rangepicker\n    date = regularizeDate(date, pickLevel, rangeSideIndex);\n    if (\n      isInRange(date, config.minDate, config.maxDate)\n      && !dates.includes(date)\n      && !config.checkDisabled(date, pickLevel)\n      && (pickLevel > 0 || !config.daysOfWeekDisabled.includes(new Date(date).getDay()))\n    ) {\n      dates.push(date);\n    }\n    return dates;\n  }, []);\n  if (newDates.length === 0) {\n    return;\n  }\n  if (config.multidate && !clear) {\n    // get the synmetric difference between origDates and newDates\n    newDates = newDates.reduce((dates, date) => {\n      if (!origDates.includes(date)) {\n        dates.push(date);\n      }\n      return dates;\n    }, origDates.filter(date => !newDates.includes(date)));\n  }\n  // do length check always because user can input multiple dates regardless of the mode\n  return maxNumberOfDates && newDates.length > maxNumberOfDates\n    ? newDates.slice(maxNumberOfDates * -1)\n    : newDates;\n}\n\n// refresh the UI elements\n// modes: 1: input only, 2, picker only, 3 both\nfunction refreshUI(datepicker, mode = 3, quickRender = true, viewDate = undefined) {\n  const {config, picker, inputField} = datepicker;\n  if (mode & 2) {\n    const newView = picker.active ? config.pickLevel : config.startView;\n    picker.update(viewDate).changeView(newView).render(quickRender);\n  }\n  if (mode & 1 && inputField) {\n    inputField.value = stringifyDates(datepicker.dates, config);\n  }\n}\n\nfunction setDate(datepicker, inputDates, options) {\n  const config = datepicker.config;\n  let {clear, render, autohide, revert, forceRefresh, viewDate} = options;\n  if (render === undefined) {\n    render = true;\n  }\n  if (!render) {\n    autohide = forceRefresh = false;\n  } else if (autohide === undefined) {\n    autohide = config.autohide;\n  }\n  viewDate = parseDate(viewDate, config.format, config.locale);\n\n  const newDates = processInputDates(datepicker, inputDates, clear);\n  if (!newDates && !revert) {\n    return;\n  }\n  if (newDates && newDates.toString() !== datepicker.dates.toString()) {\n    datepicker.dates = newDates;\n    refreshUI(datepicker, render ? 3 : 1, true, viewDate);\n    triggerDatepickerEvent(datepicker, 'changeDate');\n  } else {\n    refreshUI(datepicker, forceRefresh ? 3 : 1, true, viewDate);\n  }\n\n  if (autohide) {\n    datepicker.hide();\n  }\n}\n\nfunction getOutputConverter(datepicker, format) {\n  return format\n    ? date => formatDate(date, format, datepicker.config.locale)\n    : date => new Date(date);\n}\n\n/**\n * Class representing a date picker\n */\nexport default class Datepicker {\n  /**\n   * Create a date picker\n   * @param  {Element} element - element to bind a date picker\n   * @param  {Object} [options] - config options\n   * @param  {DateRangePicker} [rangepicker] - DateRangePicker instance the\n   * date picker belongs to. Use this only when creating date picker as a part\n   * of date range picker\n   */\n  constructor(element, options = {}, rangepicker = undefined) {\n    element.datepicker = this;\n    this.element = element;\n    this.dates = [];\n\n    // initialize config\n    const config = this.config = Object.assign({\n      buttonClass: (options.buttonClass && String(options.buttonClass)) || 'button',\n      container: null,\n      defaultViewDate: today(),\n      maxDate: undefined,\n      minDate: undefined,\n    }, processOptions(defaultOptions, this));\n\n    // configure by type\n    let inputField;\n    if (element.tagName === 'INPUT') {\n      inputField = this.inputField = element;\n      inputField.classList.add('datepicker-input');\n      if (options.container) {\n        // omit string type check because it doesn't guarantee to avoid errors\n        // (invalid selector string causes abend with sytax error)\n        config.container = options.container instanceof HTMLElement\n          ? options.container\n          : document.querySelector(options.container);\n      }\n    } else {\n      config.container = element;\n    }\n    if (rangepicker) {\n      // check validiry\n      const index = rangepicker.inputs.indexOf(inputField);\n      const datepickers = rangepicker.datepickers;\n      if (index < 0 || index > 1 || !Array.isArray(datepickers)) {\n        throw Error('Invalid rangepicker object.');\n      }\n      // attach itaelf to the rangepicker here so that processInputDates() can\n      // determine if this is the range-end picker of the rangepicker while\n      // setting inital values when pickLevel > 0\n      datepickers[index] = this;\n      this.rangepicker = rangepicker;\n      this.rangeSideIndex = index;\n    }\n\n    // set up config\n    this._options = options;\n    Object.assign(config, processOptions(options, this));\n    config.shortcutKeys = createShortcutKeyConfig(options.shortcutKeys || {});\n\n    // process initial value\n    const initialDates = stringToArray(\n      element.value || element.dataset.date,\n      config.dateDelimiter\n    );\n    delete element.dataset.date;\n    const inputDateValues = processInputDates(this, initialDates);\n    if (inputDateValues && inputDateValues.length > 0) {\n      this.dates = inputDateValues;\n    }\n    if (inputField) {\n      inputField.value = stringifyDates(this.dates, config);\n    }\n\n    // set up picekr element\n    const picker = this.picker = new Picker(this);\n\n    const keydownListener = [element, 'keydown', onKeydown.bind(null, this)];\n    if (inputField) {\n      registerListeners(this, [\n        keydownListener,\n        [inputField, 'focus', onFocus.bind(null, this)],\n        [inputField, 'mousedown', onMousedown.bind(null, this)],\n        [inputField, 'click', onClickInput.bind(null, this)],\n        [inputField, 'paste', onPaste.bind(null, this)],\n        // To detect a click on outside, just listening to mousedown is enough,\n        // no need to listen to touchstart.\n        // Actually, listening to touchstart can be a problem because, while\n        // mousedown is fired only on tapping but not on swiping/pinching,\n        // touchstart is fired on swiping/pinching as well.\n        // (issue #95)\n        [document, 'mousedown', onClickOutside.bind(null, this)],\n        [window, 'resize', picker.place.bind(picker)]\n      ]);\n    } else {\n      registerListeners(this, [keydownListener]);\n      this.show();\n    }\n  }\n\n  /**\n   * Format Date object or time value in given format and language\n   * @param  {Date|Number} date - date or time value to format\n   * @param  {String|Object} format - format string or object that contains\n   * toDisplay() custom formatter, whose signature is\n   * - args:\n   *   - date: {Date} - Date instance of the date passed to the method\n   *   - format: {Object} - the format object passed to the method\n   *   - locale: {Object} - locale for the language specified by `lang`\n   * - return:\n   *     {String} formatted date\n   * @param  {String} [lang=en] - language code for the locale to use\n   * @return {String} formatted date\n   */\n  static formatDate(date, format, lang) {\n    return formatDate(date, format, lang && locales[lang] || locales.en);\n  }\n\n  /**\n   * Parse date string\n   * @param  {String|Date|Number} dateStr - date string, Date object or time\n   * value to parse\n   * @param  {String|Object} format - format string or object that contains\n   * toValue() custom parser, whose signature is\n   * - args:\n   *   - dateStr: {String|Date|Number} - the dateStr passed to the method\n   *   - format: {Object} - the format object passed to the method\n   *   - locale: {Object} - locale for the language specified by `lang`\n   * - return:\n   *     {Date|Number} parsed date or its time value\n   * @param  {String} [lang=en] - language code for the locale to use\n   * @return {Number} time value of parsed date\n   */\n  static parseDate(dateStr, format, lang) {\n    return parseDate(dateStr, format, lang && locales[lang] || locales.en);\n  }\n\n  /**\n   * @type {Object} - Installed locales in `[languageCode]: localeObject` format\n   * en`:_English (US)_ is pre-installed.\n   */\n  static get locales() {\n    return locales;\n  }\n\n  /**\n   * @type {Boolean} - Whether the picker element is shown. `true` whne shown\n   */\n  get active() {\n    return !!(this.picker && this.picker.active);\n  }\n\n  /**\n   * @type {HTMLDivElement} - DOM object of picker element\n   */\n  get pickerElement() {\n    return this.picker ? this.picker.element : undefined;\n  }\n\n  /**\n   * Set new values to the config options\n   * @param {Object} options - config options to update\n   */\n  setOptions(options) {\n    const newOptions = processOptions(options, this);\n    Object.assign(this._options, options);\n    Object.assign(this.config, newOptions);\n    this.picker.setOptions(newOptions);\n\n    refreshUI(this, 3);\n  }\n\n  /**\n   * Show the picker element\n   */\n  show() {\n    if (this.inputField) {\n      const {config, inputField} = this;\n      if (inputField.disabled || (inputField.readOnly && !config.enableOnReadonly)) {\n        return;\n      }\n      if (!isActiveElement(inputField) && !config.disableTouchKeyboard) {\n        this._showing = true;\n        inputField.focus();\n        delete this._showing;\n      }\n    }\n    this.picker.show();\n  }\n\n  /**\n   * Hide the picker element\n   * Not available on inline picker\n   */\n  hide() {\n    if (!this.inputField) {\n      return;\n    }\n    this.picker.hide();\n    this.picker.update().changeView(this.config.startView).render();\n  }\n\n  /**\n   * Toggle the display of the picker element\n   * Not available on inline picker\n   *\n   * Unlike hide(), the picker does not return to the start view when hiding.\n   */\n  toggle() {\n    if (!this.picker.active) {\n      this.show();\n    } else if (this.inputField) {\n      this.picker.hide();\n    }\n  }\n\n  /**\n   * Destroy the Datepicker instance\n   * @return {Detepicker} - the instance destroyed\n   */\n  destroy() {\n    this.hide();\n    unregisterListeners(this);\n    this.picker.detach();\n    const element = this.element;\n    element.classList.remove('datepicker-input');\n    delete element.datepicker;\n    return this;\n  }\n\n  /**\n   * Get the selected date(s)\n   *\n   * The method returns a Date object of selected date by default, and returns\n   * an array of selected dates in multidate mode. If format string is passed,\n   * it returns date string(s) formatted in given format.\n   *\n   * @param  {String} [format] - format string to stringify the date(s)\n   * @return {Date|String|Date[]|String[]} - selected date(s), or if none is\n   * selected, empty array in multidate mode and undefined in sigledate mode\n   */\n  getDate(format = undefined) {\n    const callback = getOutputConverter(this, format);\n\n    if (this.config.multidate) {\n      return this.dates.map(callback);\n    }\n    if (this.dates.length > 0) {\n      return callback(this.dates[0]);\n    }\n  }\n\n  /**\n   * Set selected date(s)\n   *\n   * In multidate mode, you can pass multiple dates as a series of arguments\n   * or an array. (Since each date is parsed individually, the type of the\n   * dates doesn't have to be the same.)\n   * The given dates are used to toggle the select status of each date. The\n   * number of selected dates is kept from exceeding the length set to\n   * maxNumberOfDates.\n   *\n   * With clear: true option, the method can be used to clear the selection\n   * and to replace the selection instead of toggling in multidate mode.\n   * If the option is passed with no date arguments or an empty dates array,\n   * it works as \"clear\" (clear the selection then set nothing), and if the\n   * option is passed with new dates to select, it works as \"replace\" (clear\n   * the selection then set the given dates)\n   *\n   * When render: false option is used, the method omits re-rendering the\n   * picker element. In this case, you need to call refresh() method later in\n   * order for the picker element to reflect the changes. The input field is\n   * refreshed always regardless of this option.\n   *\n   * When invalid (unparsable, repeated, disabled or out-of-range) dates are\n   * passed, the method ignores them and applies only valid ones. In the case\n   * that all the given dates are invalid, which is distinguished from passing\n   * no dates, the method considers it as an error and leaves the selection\n   * untouched. (The input field also remains untouched unless revert: true\n   * option is used.)\n   * Replacing the selection with the same date(s) also causes a similar\n   * situation. In both cases, the method does not refresh the picker element\n   * unless forceRefresh: true option is used.\n   *\n   * If viewDate option is used, the method changes the focused date to the\n   * specified date instead of the last item of the selection.\n   *\n   * @param {...(Date|Number|String)|Array} [dates] - Date strings, Date\n   * objects, time values or mix of those for new selection\n   * @param {Object} [options] - function options\n   * - clear: {boolean} - Whether to clear the existing selection\n   *     defualt: false\n   * - render: {boolean} - Whether to re-render the picker element\n   *     default: true\n   * - autohide: {boolean} - Whether to hide the picker element after re-render\n   *     Ignored when used with render: false\n   *     default: config.autohide\n   * - revert: {boolean} - Whether to refresh the input field when all the\n   *     passed dates are invalid\n   *     default: false\n   * - forceRefresh: {boolean} - Whether to refresh the picker element when\n   *     passed dates don't change the existing selection\n   *     default: false\n   * - viewDate: {Date|Number|String} - Date to be focused after setiing date(s)\n   *     default: The last item of the resulting selection, or defaultViewDate\n   *     config option if none is selected\n   */\n  setDate(...args) {\n    const dates = [...args];\n    const opts = {};\n    const lastArg = lastItemOf(args);\n    if (\n      lastArg\n      && typeof lastArg === 'object'\n      && !Array.isArray(lastArg)\n      && !(lastArg instanceof Date)\n    ) {\n      Object.assign(opts, dates.pop());\n    }\n\n    const inputDates = Array.isArray(dates[0]) ? dates[0] : dates;\n    setDate(this, inputDates, opts);\n  }\n\n  /**\n   * Update the selected date(s) with input field's value\n   * Not available on inline picker\n   *\n   * The input field will be refreshed with properly formatted date string.\n   *\n   * In the case that all the entered dates are invalid (unparsable, repeated,\n   * disabled or out-of-range), which is distinguished from empty input field,\n   * the method leaves the input field untouched as well as the selection by\n   * default. If revert: true option is used in this case, the input field is\n   * refreshed with the existing selection.\n   * The method also doesn't refresh the picker element in this case and when\n   * the entered dates are the same as the existing selection. If\n   * forceRefresh: true option is used, the picker element is refreshed in\n   * these cases too.\n   *\n   * @param  {Object} [options] - function options\n   * - autohide: {boolean} - whether to hide the picker element after refresh\n   *     default: false\n   * - revert: {boolean} - Whether to refresh the input field when all the\n   *     passed dates are invalid\n   *     default: false\n   * - forceRefresh: {boolean} - Whether to refresh the picer element when\n   *     input field's value doesn't change the existing selection\n   *     default: false\n   */\n  update(options = undefined) {\n    if (!this.inputField) {\n      return;\n    }\n\n    const opts = Object.assign(options || {}, {clear: true, render: true, viewDate: undefined});\n    const inputDates = stringToArray(this.inputField.value, this.config.dateDelimiter);\n    setDate(this, inputDates, opts);\n  }\n\n  /**\n   * Get the focused date\n   *\n   * The method returns a Date object of focused date by default. If format\n   * string is passed, it returns date string formatted in given format.\n   *\n   * @param  {String} [format] - format string to stringify the date\n   * @return {Date|String} - focused date (viewDate)\n   */\n  getFocusedDate(format = undefined) {\n    return getOutputConverter(this, format)(this.picker.viewDate);\n  }\n\n  /**\n   * Set focused date\n   *\n   * By default, the method updates the focus on the view shown at the time,\n   * or the one set to the startView config option if the picker is hidden.\n   * When resetView: true is passed, the view displayed is changed to the\n   * pickLevel config option's if the picker is shown.\n   *\n   * @param {Date|Number|String} viewDate - date string, Date object, time\n   * values of the date to focus\n   * @param {Boolean} [resetView] - whether to change the view to pickLevel\n   * config option's when the picker is shown. Ignored when the picker is\n   * hidden\n   */\n  setFocusedDate(viewDate, resetView = false) {\n    const {config, picker, active, rangeSideIndex} = this;\n    const pickLevel = config.pickLevel;\n    const newViewDate = parseDate(viewDate, config.format, config.locale);\n    if (newViewDate === undefined) {\n      return;\n    }\n\n    picker.changeFocus(regularizeDate(newViewDate, pickLevel, rangeSideIndex));\n    if (active && resetView) {\n      picker.changeView(pickLevel);\n    }\n    picker.render();\n  }\n\n  /**\n   * Refresh the picker element and the associated input field\n   * @param {String} [target] - target item when refreshing one item only\n   * 'picker' or 'input'\n   * @param {Boolean} [forceRender] - whether to re-render the picker element\n   * regardless of its state instead of optimized refresh\n   */\n  refresh(target = undefined, forceRender = false) {\n    if (target && typeof target !== 'string') {\n      forceRender = target;\n      target = undefined;\n    }\n\n    let mode;\n    if (target === 'picker') {\n      mode = 2;\n    } else if (target === 'input') {\n      mode = 1;\n    } else {\n      mode = 3;\n    }\n    refreshUI(this, mode, !forceRender);\n  }\n\n  /**\n   * Enter edit mode\n   * Not available on inline picker or when the picker element is hidden\n   */\n  enterEditMode() {\n    const inputField = this.inputField;\n    if (!inputField || inputField.readOnly || !this.picker.active || this.editMode) {\n      return;\n    }\n    this.editMode = true;\n    inputField.classList.add('in-edit');\n  }\n\n  /**\n   * Exit from edit mode\n   * Not available on inline picker\n   * @param  {Object} [options] - function options\n   * - update: {boolean} - whether to call update() after exiting\n   *     If false, input field is revert to the existing selection\n   *     default: false\n   */\n  exitEditMode(options = undefined) {\n    if (!this.inputField || !this.editMode) {\n      return;\n    }\n    const opts = Object.assign({update: false}, options);\n    delete this.editMode;\n    this.inputField.classList.remove('in-edit');\n    if (opts.update) {\n      this.update(opts);\n    }\n  }\n}\n", "/**\n * German translation for bootstrap-datepicker\n * Sam Zurcher <sam@orelias.ch>\n */\nexport default {\n  de: {\n    days: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"],\n    daysShort: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n    daysMin: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n    months: [\"Januar\", \"Februar\", \"M\u00E4rz\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n    monthsShort: [\"Jan\", \"Feb\", \"M\u00E4r\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"],\n    today: \"Heute\",\n    monthsTitle: \"Monate\",\n    clear: \"L\u00F6schen\",\n    weekStart: 1,\n    format: \"dd.mm.yyyy\"\n  }\n};\n", "/**\n * Canadian English translation for bootstrap-datepicker\n * Mike Nacey <mnacey@gmail.com>\n */\nexport default {\n  'en-CA': {\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    today: \"Today\",\n    monthsTitle: \"Months\",\n    clear: \"Clear\",\n    weekStart: 0,\n    format: \"yyyy-mm-dd\"\n  }\n};\n", "import {Datepicker} from 'vanillajs-datepicker';\nimport de from 'vanillajs-datepicker/locales/de';\nimport en from 'vanillajs-datepicker/locales/en-CA';\n\nObject.assign(Datepicker.locales, en, de);\n\n// The Rails locale codes do not all match the ones the datepicker ships.\nexport function mapLocale(locale) {\n    switch (locale) {\n        case 'en':\n            return 'en-CA';\n        default:\n            return locale;\n    }\n}\n\n// The datepicker has its own format syntax (\"dd.mm.yyyy\"), which is not the strftime pattern Ruby\n// uses. Anything rendering a date for the user has to take it from here, otherwise the pattern ends\n// up on screen unreplaced.\nexport function dateFormatFor(locale) {\n    const language = Datepicker.locales[mapLocale(locale)] || Datepicker.locales.en;\n    return language.format;\n}\n", "import {Controller} from '@hotwired/stimulus';\nimport {Datepicker} from 'vanillajs-datepicker';\nimport {mapLocale} from '../components/datepicker/locales';\n\nexport class DatepickerController extends Controller {\n\n    static values = {\n        openerId: String,\n        pickLevel: Number,\n        maxDate: String,\n        minDate: String,\n        locale: String,\n        minDateFor: String,\n        maxDateFor: String,\n        setDateFor: String,\n        setDateForOffset: { type: Number, default: 0 }\n    }\n\n    static targets = [\n        'input'\n    ]\n\n    connect() {\n        this.config = this.loadConfig();\n        // this.datepickerElement.setAttribute('type', 'text');\n        this.datepickerElement.setAttribute('autocomplete', 'off');\n        // register before datepicker because of event order\n        this.registerDateFixer();\n        this.datepicker = new Datepicker(this.datepickerElement, {\n            ...this.config\n        });\n        this.registerCalButtons();\n        this.registerRestrictors();\n    }\n\n    disconnect() {\n        this.datepicker.destroy();\n    }\n\n    loadConfig() {\n        return {\n            pickLevel: this.hasPickLevelValue ? this.pickLevelValue : undefined,\n            language: this.hasLocaleValue ? mapLocale(this.localeValue) : undefined,\n            minDate: this.minDateValue,\n            maxDate: this.maxDateValue,\n            buttonClass: 'btn',\n            showOnClick: false,\n            showOnFocus: false,\n            autohide: true,\n            orientation: 'auto right',\n            todayBtn: true,\n            // clearBtn: true,\n            todayHighlight: true\n        };\n    }\n\n    minDateValueChanged() {\n        if (this.config && this.datepicker) {\n            this.config.minDate = this.minDateValue;\n            this.datepicker.setOptions(this.config)\n        }\n    }\n\n    maxDateValueChanged() {\n        if (this.config && this.datepicker) {\n            this.config.maxDate = this.maxDateValue;\n            this.datepicker.setOptions(this.config)\n        }\n    }\n\n    registerCalButtons() {\n        if (this.hasOpenerIdValue) {\n            document.getElementById(this.openerIdValue).addEventListener('click', () => this.datepicker.show());\n        }\n    }\n\n    registerRestrictors() {\n        if (this.hasMinDateForValue) {\n            this.updateMinDate();\n            this.datepicker.element.addEventListener('changeDate', () => this.updateMinDate());\n        }\n        if (this.hasMaxDateForValue) {\n            this.updateMaxDate();\n            this.datepicker.element.addEventListener('changeDate', () => this.updateMaxDate());\n        }\n        if (this.hasSetDateForValue) {\n            this.datepicker.element.addEventListener('changeDate', () => this.setDateFor());\n        }\n    }\n\n    registerDateFixer() {\n        this.datepickerElement.addEventListener('focusout', (event) => {\n            this.fixDate();\n        });\n    }\n\n    fixDate() {\n        const dateMs = Datepicker.parseDate(this.datepickerElement.value, Datepicker.locales[this.datepicker.config.language].format);\n        const date = dateMs ? new Date(dateMs) : undefined;\n        if (date && date.getFullYear() < 100) {\n            let year = date.getFullYear() + 1900\n            if (year < new Date().getFullYear() - 90) {\n                year += 100;\n            }\n            date.setFullYear(year);\n        }\n        this.datepicker.element.value = Datepicker.formatDate(date, Datepicker.locales[this.datepicker.config.language].format);\n        this.datepicker.setDate(date);\n    }\n\n    updateMinDate() {\n        const elements = this.findElements(this.minDateForValue);\n        elements.forEach(e => {\n            const date = this.datepicker.getDate(Datepicker.locales[this.datepicker.config.language].format);\n            if (date) {\n                e.setAttribute('data-datepicker-min-date-value', date)\n            } else {\n                if (e.hasAttribute('data-datepicker-min-date-value')) {\n                    e.removeAttribute('data-datepicker-min-date-value')\n                }\n            }\n        })\n    }\n\n    updateMaxDate() {\n        const elements = this.findElements(this.maxDateForValue);\n        elements.forEach(e => {\n            const date = this.datepicker.getDate(Datepicker.locales[this.datepicker.config.language].format);\n            if (date) {\n                e.setAttribute('data-datepicker-max-date-value', date)\n            } else {\n                if (e.hasAttribute('data-datepicker-max-date-value')) {\n                    e.removeAttribute('data-datepicker-max-date-value')\n                }\n            }\n        })\n    }\n\n    setDateFor() {\n        const date = this.datepicker.getDate();\n        if (!date) {\n            return;\n        }\n        const elements = this.findElements(this.setDateForValue);\n        elements.forEach(e => {\n            var offsetDate = new Date(date);\n            offsetDate.setDate(offsetDate.getDate() + this.setDateForOffsetValue);\n            e.datepicker.setDate(offsetDate);\n        })\n    }\n\n    findElements(pattern) {\n        if (!pattern) {\n            return [];\n        }\n        // the form is a performance optimization. In general we don't expect to connect inputs across forms.\n        const form = this.datepickerElement.closest('form');\n        let elements;\n        let i;\n        switch (pattern) {\n            case ':next':\n                elements = Array.prototype.slice.call((form || document).querySelectorAll('input.date, input.date_picker'));\n                i = elements.indexOf(this.datepickerElement);\n                return elements[i + 1] ? [elements[i + 1]] : []\n            case ':previous':\n                elements = Array.prototype.slice.call((form || document).querySelectorAll('input.date, input.date_picker'));\n                i = elements.indexOf(this.datepickerElement);\n                return elements[i - 1] ? [elements[i - 1]] : []\n            default:\n                return (form || document).querySelectorAll(pattern)\n        }\n\n    }\n\n    get datepickerElement() {\n        return (this.hasInputTarget && this.inputTarget) || this.element\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\n\nexport class RemovableController extends Controller {\n\n    static targets = ['removable']\n\n    static values = { confirmation: String }\n\n    get removableElement() {\n        return (this.hasRemovableTarget && this.removableTarget) || this.element\n    }\n\n    remove() {\n        if (this.hasConfimationValue) {\n            bootbox.dialog(this.confirmationValue, (result) => {\n                if (result) {\n                    this.removableElement.remove();\n                }\n            });\n        } else {\n            this.removableElement.remove();\n        }\n    }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nconst _CheckboxSelectAll = class _CheckboxSelectAll extends Controller {\n  initialize() {\n    this.toggle = this.toggle.bind(this), this.refresh = this.refresh.bind(this);\n  }\n  checkboxAllTargetConnected(checkbox) {\n    checkbox.addEventListener(\"change\", this.toggle), this.refresh();\n  }\n  checkboxTargetConnected(checkbox) {\n    checkbox.addEventListener(\"change\", this.refresh), this.refresh();\n  }\n  checkboxAllTargetDisconnected(checkbox) {\n    checkbox.removeEventListener(\"change\", this.toggle), this.refresh();\n  }\n  checkboxTargetDisconnected(checkbox) {\n    checkbox.removeEventListener(\"change\", this.refresh), this.refresh();\n  }\n  toggle(e) {\n    e.preventDefault(), this.checkboxTargets.forEach((checkbox) => {\n      checkbox.checked = e.target.checked, this.triggerInputEvent(checkbox);\n    });\n  }\n  refresh() {\n    const checkboxesCount = this.checkboxTargets.length, checkboxesCheckedCount = this.checked.length;\n    this.disableIndeterminateValue ? this.checkboxAllTarget.checked = checkboxesCheckedCount === checkboxesCount : (this.checkboxAllTarget.checked = checkboxesCheckedCount > 0, this.checkboxAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount);\n  }\n  triggerInputEvent(checkbox) {\n    const event = new Event(\"input\", { bubbles: !1, cancelable: !0 });\n    checkbox.dispatchEvent(event);\n  }\n  get checked() {\n    return this.checkboxTargets.filter((checkbox) => checkbox.checked);\n  }\n  get unchecked() {\n    return this.checkboxTargets.filter((checkbox) => !checkbox.checked);\n  }\n};\n_CheckboxSelectAll.targets = [\"checkboxAll\", \"checkbox\"], _CheckboxSelectAll.values = {\n  disableIndeterminate: {\n    type: Boolean,\n    default: !1\n  }\n};\nlet CheckboxSelectAll = _CheckboxSelectAll;\nexport {\n  CheckboxSelectAll as default\n};\n", "import CheckboxSelectAll from \"@stimulus-components/checkbox-select-all\"\n\nexport class CheckboxSelectAllController extends CheckboxSelectAll {\n\n    invert(e) {\n        e.preventDefault();\n\n        this.checkboxTargets.forEach(checkbox => {\n            checkbox.checked = !checkbox.checked\n            this.triggerInputEvent(checkbox)\n        });\n        this.refresh();\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\n\nexport class MergeFieldsController extends Controller {\n\n    static targets = [\n        'lhsInput',\n        'rhsInput',\n        'mergeButton',\n        'undoButton'\n    ]\n\n    merge(e) {\n        e.preventDefault();\n        let i = 0\n        this.lhsInputTargets.forEach(lhsInput => {\n            const rhsInput = this.rhsInputTargets[i++];\n            this.mergeInput(lhsInput, rhsInput);\n            rhsInput.closest('div.form-group').hidden = true;\n        })\n        this.hideMergeButtons();\n    }\n\n    undo(e) {\n        e.preventDefault();\n        let i = 0\n        this.lhsInputTargets.forEach(lhsInput => {\n            const rhsInput = this.rhsInputTargets[i++];\n            this.undoInput(lhsInput, rhsInput);\n            rhsInput.closest('div.form-group').hidden = false;\n        })\n        this.showMergeButtons();\n    }\n\n    mergeInput(lhsInput, rhsInput) {\n        switch (lhsInput.type) {\n            case 'radio':\n            case 'checkbox':\n                lhsInput.checked = rhsInput.checked;\n                break;\n            default:\n                if (lhsInput.classList.contains('select2')) {\n                    if (lhsInput.classList.contains('ajax')) {\n                        // TODO\n                    } else {\n                        $(lhsInput).select2('val', $(rhsInput).select2('val'));\n                    }\n                } else {\n                    lhsInput.value = rhsInput.value;\n                }\n        }\n    }\n\n    undoInput(lhsInput, rhsInput) {\n        if (lhsInput.classList.contains('select2')) {\n            if (lhsInput.classList.contains('ajax')) {\n                // TODO\n            } else {\n                const defaultValue = Array.from(lhsInput.options).find(opt => opt.defaultSelected)?.value;\n                $(lhsInput).select2('val', defaultValue);\n            }\n        } else if (lhsInput.tagName?.toLowerCase() === 'select') {\n            const defaultValue = Array.from(lhsInput.options).find(opt => opt.defaultSelected)?.value;\n            lhsInput.value = lhsInput.defaultValue;\n        } else {\n            lhsInput.value = lhsInput.defaultValue;\n            lhsInput.checked = lhsInput.defaultChecked;\n        }\n    }\n\n    hideMergeButtons() {\n        this.mergeButtonTargets.forEach(b => {\n            b.hidden = true\n        });\n        this.undoButtonTargets.forEach(b => {\n            b.hidden = false\n        });\n    }\n\n    showMergeButtons() {\n        this.mergeButtonTargets.forEach(b => {\n            b.hidden = false\n        });\n        this.undoButtonTargets.forEach(b => {\n            b.hidden = true\n        });\n    }\n\n}\n\n", "import {Controller} from '@hotwired/stimulus';\n\nexport class RadioToggleController extends Controller {\n\n    static targets = [\"element\", \"radio\"]\n\n    connect() {\n        for (let element of this.elementTargets) {\n            this.toggle(element, this.radioValue());\n            this.radioTargets.forEach(r => r.addEventListener('change', event => {\n                for (let element of this.elementTargets) {\n                    this.toggle(element, this.radioValue());\n                }\n            }))\n        }\n    }\n\n    radioValue() {\n        return this.radioTargets.find(r => r.checked)?.value;\n    }\n\n    toggle(element, radioValue) {\n        const visibleValues = element.dataset.values || element.dataset.radioToggleValues;\n        if (element && visibleValues != undefined) {\n            let hidden;\n            if (visibleValues === '*') {\n                hidden = !radioValue;\n            } else {\n                hidden = !visibleValues.split(',').includes(radioValue);\n            }\n            element.hidden = hidden;\n            if (['INPUT', 'SELECT'].includes(element.tagName)) {\n                element.disabled = hidden;\n            }\n        }\n    }\n\n}\n", "/**!\n * Sortable 1.15.6\n * @author\tRubaXa   <trash@rubaxa.org>\n * @author\towenm    <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n    keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n  return target;\n}\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n  return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n  return target;\n}\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n  return arr2;\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.6\";\n\nfunction userAgent(pattern) {\n  if (typeof window !== 'undefined' && window.navigator) {\n    return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n  }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n  capture: false,\n  passive: false\n};\nfunction on(el, event, fn) {\n  el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n  el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n  if (!selector) return;\n  selector[0] === '>' && (selector = selector.substring(1));\n  if (el) {\n    try {\n      if (el.matches) {\n        return el.matches(selector);\n      } else if (el.msMatchesSelector) {\n        return el.msMatchesSelector(selector);\n      } else if (el.webkitMatchesSelector) {\n        return el.webkitMatchesSelector(selector);\n      }\n    } catch (_) {\n      return false;\n    }\n  }\n  return false;\n}\nfunction getParentOrHost(el) {\n  return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n  if (el) {\n    ctx = ctx || document;\n    do {\n      if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n        return el;\n      }\n      if (el === ctx) break;\n      /* jshint boss:true */\n    } while (el = getParentOrHost(el));\n  }\n  return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n  if (el && name) {\n    if (el.classList) {\n      el.classList[state ? 'add' : 'remove'](name);\n    } else {\n      var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n      el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n    }\n  }\n}\nfunction css(el, prop, val) {\n  var style = el && el.style;\n  if (style) {\n    if (val === void 0) {\n      if (document.defaultView && document.defaultView.getComputedStyle) {\n        val = document.defaultView.getComputedStyle(el, '');\n      } else if (el.currentStyle) {\n        val = el.currentStyle;\n      }\n      return prop === void 0 ? val : val[prop];\n    } else {\n      if (!(prop in style) && prop.indexOf('webkit') === -1) {\n        prop = '-webkit-' + prop;\n      }\n      style[prop] = val + (typeof val === 'string' ? '' : 'px');\n    }\n  }\n}\nfunction matrix(el, selfOnly) {\n  var appliedTransforms = '';\n  if (typeof el === 'string') {\n    appliedTransforms = el;\n  } else {\n    do {\n      var transform = css(el, 'transform');\n      if (transform && transform !== 'none') {\n        appliedTransforms = transform + ' ' + appliedTransforms;\n      }\n      /* jshint boss:true */\n    } while (!selfOnly && (el = el.parentNode));\n  }\n  var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n  /*jshint -W056 */\n  return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n  if (ctx) {\n    var list = ctx.getElementsByTagName(tagName),\n      i = 0,\n      n = list.length;\n    if (iterator) {\n      for (; i < n; i++) {\n        iterator(list[i], i);\n      }\n    }\n    return list;\n  }\n  return [];\n}\nfunction getWindowScrollingElement() {\n  var scrollingElement = document.scrollingElement;\n  if (scrollingElement) {\n    return scrollingElement;\n  } else {\n    return document.documentElement;\n  }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted\r\n * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container\r\n * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone\r\n * @param  {[HTMLElement]} container              The parent the element will be placed in\r\n * @return {Object}                               The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n  if (!el.getBoundingClientRect && el !== window) return;\n  var elRect, top, left, bottom, right, height, width;\n  if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n    elRect = el.getBoundingClientRect();\n    top = elRect.top;\n    left = elRect.left;\n    bottom = elRect.bottom;\n    right = elRect.right;\n    height = elRect.height;\n    width = elRect.width;\n  } else {\n    top = 0;\n    left = 0;\n    bottom = window.innerHeight;\n    right = window.innerWidth;\n    height = window.innerHeight;\n    width = window.innerWidth;\n  }\n  if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n    // Adjust for translate()\n    container = container || el.parentNode;\n\n    // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n    // Not needed on <= IE11\n    if (!IE11OrLess) {\n      do {\n        if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n          var containerRect = container.getBoundingClientRect();\n\n          // Set relative to edges of padding box of container\n          top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n          left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n          bottom = top + elRect.height;\n          right = left + elRect.width;\n          break;\n        }\n        /* jshint boss:true */\n      } while (container = container.parentNode);\n    }\n  }\n  if (undoScale && el !== window) {\n    // Adjust for scale()\n    var elMatrix = matrix(container || el),\n      scaleX = elMatrix && elMatrix.a,\n      scaleY = elMatrix && elMatrix.d;\n    if (elMatrix) {\n      top /= scaleY;\n      left /= scaleX;\n      width /= scaleX;\n      height /= scaleY;\n      bottom = top + height;\n      right = left + width;\n    }\n  }\n  return {\n    top: top,\n    left: left,\n    bottom: bottom,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question\r\n * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n  var parent = getParentAutoScrollElement(el, true),\n    elSideVal = getRect(el)[elSide];\n\n  /* jshint boss:true */\n  while (parent) {\n    var parentSideVal = getRect(parent)[parentSide],\n      visible = void 0;\n    if (parentSide === 'top' || parentSide === 'left') {\n      visible = elSideVal >= parentSideVal;\n    } else {\n      visible = elSideVal <= parentSideVal;\n    }\n    if (!visible) return parent;\n    if (parent === getWindowScrollingElement()) break;\n    parent = getParentAutoScrollElement(parent, false);\n  }\n  return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param  {HTMLElement} el       The parent element\r\n * @param  {Number} childNum      The index of the child\r\n * @param  {Object} options       Parent Sortable's options\r\n * @return {HTMLElement}          The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n  var currentChild = 0,\n    i = 0,\n    children = el.children;\n  while (i < children.length) {\n    if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n      if (currentChild === childNum) {\n        return children[i];\n      }\n      currentChild++;\n    }\n    i++;\n  }\n  return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param  {HTMLElement} el       Parent element\r\n * @param  {selector} selector    Any other elements that should be ignored\r\n * @return {HTMLElement}          The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n  var last = el.lastElementChild;\n  while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n    last = last.previousElementSibling;\n  }\n  return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param  {HTMLElement} el\r\n * @param  {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n  var index = 0;\n  if (!el || !el.parentNode) {\n    return -1;\n  }\n\n  /* jshint boss:true */\n  while (el = el.previousElementSibling) {\n    if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n      index++;\n    }\n  }\n  return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param  {HTMLElement} el\r\n * @return {Array}             Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n  var offsetLeft = 0,\n    offsetTop = 0,\n    winScroller = getWindowScrollingElement();\n  if (el) {\n    do {\n      var elMatrix = matrix(el),\n        scaleX = elMatrix.a,\n        scaleY = elMatrix.d;\n      offsetLeft += el.scrollLeft * scaleX;\n      offsetTop += el.scrollTop * scaleY;\n    } while (el !== winScroller && (el = el.parentNode));\n  }\n  return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param  {Array} arr   Array that may or may not hold the object\r\n * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number}      The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n  for (var i in arr) {\n    if (!arr.hasOwnProperty(i)) continue;\n    for (var key in obj) {\n      if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n    }\n  }\n  return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n  // skip to window\n  if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n  var elem = el;\n  var gotSelf = false;\n  do {\n    // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n    if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n      var elemCSS = css(elem);\n      if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n        if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n        if (gotSelf || includeSelf) return elem;\n        gotSelf = true;\n      }\n    }\n    /* jshint boss:true */\n  } while (elem = elem.parentNode);\n  return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n  if (dst && src) {\n    for (var key in src) {\n      if (src.hasOwnProperty(key)) {\n        dst[key] = src[key];\n      }\n    }\n  }\n  return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n  return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n  return function () {\n    if (!_throttleTimeout) {\n      var args = arguments,\n        _this = this;\n      if (args.length === 1) {\n        callback.call(_this, args[0]);\n      } else {\n        callback.apply(_this, args);\n      }\n      _throttleTimeout = setTimeout(function () {\n        _throttleTimeout = void 0;\n      }, ms);\n    }\n  };\n}\nfunction cancelThrottle() {\n  clearTimeout(_throttleTimeout);\n  _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n  el.scrollLeft += x;\n  el.scrollTop += y;\n}\nfunction clone(el) {\n  var Polymer = window.Polymer;\n  var $ = window.jQuery || window.Zepto;\n  if (Polymer && Polymer.dom) {\n    return Polymer.dom(el).cloneNode(true);\n  } else if ($) {\n    return $(el).clone(true)[0];\n  } else {\n    return el.cloneNode(true);\n  }\n}\nfunction setRect(el, rect) {\n  css(el, 'position', 'absolute');\n  css(el, 'top', rect.top);\n  css(el, 'left', rect.left);\n  css(el, 'width', rect.width);\n  css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n  css(el, 'position', '');\n  css(el, 'top', '');\n  css(el, 'left', '');\n  css(el, 'width', '');\n  css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n  var rect = {};\n  Array.from(container.children).forEach(function (child) {\n    var _rect$left, _rect$top, _rect$right, _rect$bottom;\n    if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n    var childRect = getRect(child);\n    rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n    rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n    rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n    rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n  });\n  rect.width = rect.right - rect.left;\n  rect.height = rect.bottom - rect.top;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n  var animationStates = [],\n    animationCallbackId;\n  return {\n    captureAnimationState: function captureAnimationState() {\n      animationStates = [];\n      if (!this.options.animation) return;\n      var children = [].slice.call(this.el.children);\n      children.forEach(function (child) {\n        if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n        animationStates.push({\n          target: child,\n          rect: getRect(child)\n        });\n        var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n        // If animating: compensate for current animation\n        if (child.thisAnimationDuration) {\n          var childMatrix = matrix(child, true);\n          if (childMatrix) {\n            fromRect.top -= childMatrix.f;\n            fromRect.left -= childMatrix.e;\n          }\n        }\n        child.fromRect = fromRect;\n      });\n    },\n    addAnimationState: function addAnimationState(state) {\n      animationStates.push(state);\n    },\n    removeAnimationState: function removeAnimationState(target) {\n      animationStates.splice(indexOfObject(animationStates, {\n        target: target\n      }), 1);\n    },\n    animateAll: function animateAll(callback) {\n      var _this = this;\n      if (!this.options.animation) {\n        clearTimeout(animationCallbackId);\n        if (typeof callback === 'function') callback();\n        return;\n      }\n      var animating = false,\n        animationTime = 0;\n      animationStates.forEach(function (state) {\n        var time = 0,\n          target = state.target,\n          fromRect = target.fromRect,\n          toRect = getRect(target),\n          prevFromRect = target.prevFromRect,\n          prevToRect = target.prevToRect,\n          animatingRect = state.rect,\n          targetMatrix = matrix(target, true);\n        if (targetMatrix) {\n          // Compensate for current animation\n          toRect.top -= targetMatrix.f;\n          toRect.left -= targetMatrix.e;\n        }\n        target.toRect = toRect;\n        if (target.thisAnimationDuration) {\n          // Could also check if animatingRect is between fromRect and toRect\n          if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n          // Make sure animatingRect is on line between toRect & fromRect\n          (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n            // If returning to same place as started from animation and on same axis\n            time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n          }\n        }\n\n        // if fromRect != toRect: animate\n        if (!isRectEqual(toRect, fromRect)) {\n          target.prevFromRect = fromRect;\n          target.prevToRect = toRect;\n          if (!time) {\n            time = _this.options.animation;\n          }\n          _this.animate(target, animatingRect, toRect, time);\n        }\n        if (time) {\n          animating = true;\n          animationTime = Math.max(animationTime, time);\n          clearTimeout(target.animationResetTimer);\n          target.animationResetTimer = setTimeout(function () {\n            target.animationTime = 0;\n            target.prevFromRect = null;\n            target.fromRect = null;\n            target.prevToRect = null;\n            target.thisAnimationDuration = null;\n          }, time);\n          target.thisAnimationDuration = time;\n        }\n      });\n      clearTimeout(animationCallbackId);\n      if (!animating) {\n        if (typeof callback === 'function') callback();\n      } else {\n        animationCallbackId = setTimeout(function () {\n          if (typeof callback === 'function') callback();\n        }, animationTime);\n      }\n      animationStates = [];\n    },\n    animate: function animate(target, currentRect, toRect, duration) {\n      if (duration) {\n        css(target, 'transition', '');\n        css(target, 'transform', '');\n        var elMatrix = matrix(this.el),\n          scaleX = elMatrix && elMatrix.a,\n          scaleY = elMatrix && elMatrix.d,\n          translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n          translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n        target.animatingX = !!translateX;\n        target.animatingY = !!translateY;\n        css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n        this.forRepaintDummy = repaint(target); // repaint\n\n        css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n        css(target, 'transform', 'translate3d(0,0,0)');\n        typeof target.animated === 'number' && clearTimeout(target.animated);\n        target.animated = setTimeout(function () {\n          css(target, 'transition', '');\n          css(target, 'transform', '');\n          target.animated = false;\n          target.animatingX = false;\n          target.animatingY = false;\n        }, duration);\n      }\n    }\n  };\n}\nfunction repaint(target) {\n  return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n  return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n  initializeByDefault: true\n};\nvar PluginManager = {\n  mount: function mount(plugin) {\n    // Set default static properties\n    for (var option in defaults) {\n      if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n        plugin[option] = defaults[option];\n      }\n    }\n    plugins.forEach(function (p) {\n      if (p.pluginName === plugin.pluginName) {\n        throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n      }\n    });\n    plugins.push(plugin);\n  },\n  pluginEvent: function pluginEvent(eventName, sortable, evt) {\n    var _this = this;\n    this.eventCanceled = false;\n    evt.cancel = function () {\n      _this.eventCanceled = true;\n    };\n    var eventNameGlobal = eventName + 'Global';\n    plugins.forEach(function (plugin) {\n      if (!sortable[plugin.pluginName]) return;\n      // Fire global events if it exists in this sortable\n      if (sortable[plugin.pluginName][eventNameGlobal]) {\n        sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      }\n\n      // Only fire plugin event if plugin is enabled in this sortable,\n      // and plugin has event defined\n      if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n        sortable[plugin.pluginName][eventName](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      }\n    });\n  },\n  initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n    plugins.forEach(function (plugin) {\n      var pluginName = plugin.pluginName;\n      if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n      var initialized = new plugin(sortable, el, sortable.options);\n      initialized.sortable = sortable;\n      initialized.options = sortable.options;\n      sortable[pluginName] = initialized;\n\n      // Add default options from plugin\n      _extends(defaults, initialized.defaults);\n    });\n    for (var option in sortable.options) {\n      if (!sortable.options.hasOwnProperty(option)) continue;\n      var modified = this.modifyOption(sortable, option, sortable.options[option]);\n      if (typeof modified !== 'undefined') {\n        sortable.options[option] = modified;\n      }\n    }\n  },\n  getEventProperties: function getEventProperties(name, sortable) {\n    var eventProperties = {};\n    plugins.forEach(function (plugin) {\n      if (typeof plugin.eventProperties !== 'function') return;\n      _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n    });\n    return eventProperties;\n  },\n  modifyOption: function modifyOption(sortable, name, value) {\n    var modifiedValue;\n    plugins.forEach(function (plugin) {\n      // Plugin must exist on the Sortable\n      if (!sortable[plugin.pluginName]) return;\n\n      // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n      if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n        modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n      }\n    });\n    return modifiedValue;\n  }\n};\n\nfunction dispatchEvent(_ref) {\n  var sortable = _ref.sortable,\n    rootEl = _ref.rootEl,\n    name = _ref.name,\n    targetEl = _ref.targetEl,\n    cloneEl = _ref.cloneEl,\n    toEl = _ref.toEl,\n    fromEl = _ref.fromEl,\n    oldIndex = _ref.oldIndex,\n    newIndex = _ref.newIndex,\n    oldDraggableIndex = _ref.oldDraggableIndex,\n    newDraggableIndex = _ref.newDraggableIndex,\n    originalEvent = _ref.originalEvent,\n    putSortable = _ref.putSortable,\n    extraEventProperties = _ref.extraEventProperties;\n  sortable = sortable || rootEl && rootEl[expando];\n  if (!sortable) return;\n  var evt,\n    options = sortable.options,\n    onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n  // Support for new CustomEvent feature\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent(name, true, true);\n  }\n  evt.to = toEl || rootEl;\n  evt.from = fromEl || rootEl;\n  evt.item = targetEl || rootEl;\n  evt.clone = cloneEl;\n  evt.oldIndex = oldIndex;\n  evt.newIndex = newIndex;\n  evt.oldDraggableIndex = oldDraggableIndex;\n  evt.newDraggableIndex = newDraggableIndex;\n  evt.originalEvent = originalEvent;\n  evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n  var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n  for (var option in allEventProperties) {\n    evt[option] = allEventProperties[option];\n  }\n  if (rootEl) {\n    rootEl.dispatchEvent(evt);\n  }\n  if (options[onName]) {\n    options[onName].call(sortable, evt);\n  }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n    originalEvent = _ref.evt,\n    data = _objectWithoutProperties(_ref, _excluded);\n  PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n    dragEl: dragEl,\n    parentEl: parentEl,\n    ghostEl: ghostEl,\n    rootEl: rootEl,\n    nextEl: nextEl,\n    lastDownEl: lastDownEl,\n    cloneEl: cloneEl,\n    cloneHidden: cloneHidden,\n    dragStarted: moved,\n    putSortable: putSortable,\n    activeSortable: Sortable.active,\n    originalEvent: originalEvent,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex,\n    hideGhostForTarget: _hideGhostForTarget,\n    unhideGhostForTarget: _unhideGhostForTarget,\n    cloneNowHidden: function cloneNowHidden() {\n      cloneHidden = true;\n    },\n    cloneNowShown: function cloneNowShown() {\n      cloneHidden = false;\n    },\n    dispatchSortableEvent: function dispatchSortableEvent(name) {\n      _dispatchEvent({\n        sortable: sortable,\n        name: name,\n        originalEvent: originalEvent\n      });\n    }\n  }, data));\n};\nfunction _dispatchEvent(info) {\n  dispatchEvent(_objectSpread2({\n    putSortable: putSortable,\n    cloneEl: cloneEl,\n    targetEl: dragEl,\n    rootEl: rootEl,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex\n  }, info));\n}\nvar dragEl,\n  parentEl,\n  ghostEl,\n  rootEl,\n  nextEl,\n  lastDownEl,\n  cloneEl,\n  cloneHidden,\n  oldIndex,\n  newIndex,\n  oldDraggableIndex,\n  newDraggableIndex,\n  activeGroup,\n  putSortable,\n  awaitingDragStarted = false,\n  ignoreNextClick = false,\n  sortables = [],\n  tapEvt,\n  touchEvt,\n  lastDx,\n  lastDy,\n  tapDistanceLeft,\n  tapDistanceTop,\n  moved,\n  lastTarget,\n  lastDirection,\n  pastFirstInvertThresh = false,\n  isCircumstantialInvert = false,\n  targetMoveDistance,\n  // For positioning ghost absolutely\n  ghostRelativeParent,\n  ghostRelativeParentInitialScroll = [],\n  // (left, top)\n\n  _silent = false,\n  savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n  PositionGhostAbsolutely = IOS,\n  CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n  // This will not pass for IE9, because IE9 DnD only works on anchors\n  supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n  supportCssPointerEvents = function () {\n    if (!documentExists) return;\n    // false when <= IE11\n    if (IE11OrLess) {\n      return false;\n    }\n    var el = document.createElement('x');\n    el.style.cssText = 'pointer-events:auto';\n    return el.style.pointerEvents === 'auto';\n  }(),\n  _detectDirection = function _detectDirection(el, options) {\n    var elCSS = css(el),\n      elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n      child1 = getChild(el, 0, options),\n      child2 = getChild(el, 1, options),\n      firstChildCSS = child1 && css(child1),\n      secondChildCSS = child2 && css(child2),\n      firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n      secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n    if (elCSS.display === 'flex') {\n      return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n    }\n    if (elCSS.display === 'grid') {\n      return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n    }\n    if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n      var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n      return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n    }\n    return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n  },\n  _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n    var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n      dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n      dragElOppLength = vertical ? dragRect.width : dragRect.height,\n      targetS1Opp = vertical ? targetRect.left : targetRect.top,\n      targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n      targetOppLength = vertical ? targetRect.width : targetRect.height;\n    return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n  },\n  /**\r\n   * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n   * @param  {Number} x      X position\r\n   * @param  {Number} y      Y position\r\n   * @return {HTMLElement}   Element of the first found nearest Sortable\r\n   */\n  _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n    var ret;\n    sortables.some(function (sortable) {\n      var threshold = sortable[expando].options.emptyInsertThreshold;\n      if (!threshold || lastChild(sortable)) return;\n      var rect = getRect(sortable),\n        insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n        insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n      if (insideHorizontally && insideVertically) {\n        return ret = sortable;\n      }\n    });\n    return ret;\n  },\n  _prepareGroup = function _prepareGroup(options) {\n    function toFn(value, pull) {\n      return function (to, from, dragEl, evt) {\n        var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n        if (value == null && (pull || sameGroup)) {\n          // Default pull value\n          // Default pull and put value if same group\n          return true;\n        } else if (value == null || value === false) {\n          return false;\n        } else if (pull && value === 'clone') {\n          return value;\n        } else if (typeof value === 'function') {\n          return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n        } else {\n          var otherGroup = (pull ? to : from).options.group.name;\n          return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n        }\n      };\n    }\n    var group = {};\n    var originalGroup = options.group;\n    if (!originalGroup || _typeof(originalGroup) != 'object') {\n      originalGroup = {\n        name: originalGroup\n      };\n    }\n    group.name = originalGroup.name;\n    group.checkPull = toFn(originalGroup.pull, true);\n    group.checkPut = toFn(originalGroup.put);\n    group.revertClone = originalGroup.revertClone;\n    options.group = group;\n  },\n  _hideGhostForTarget = function _hideGhostForTarget() {\n    if (!supportCssPointerEvents && ghostEl) {\n      css(ghostEl, 'display', 'none');\n    }\n  },\n  _unhideGhostForTarget = function _unhideGhostForTarget() {\n    if (!supportCssPointerEvents && ghostEl) {\n      css(ghostEl, 'display', '');\n    }\n  };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n  document.addEventListener('click', function (evt) {\n    if (ignoreNextClick) {\n      evt.preventDefault();\n      evt.stopPropagation && evt.stopPropagation();\n      evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n      ignoreNextClick = false;\n      return false;\n    }\n  }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n  if (dragEl) {\n    evt = evt.touches ? evt.touches[0] : evt;\n    var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n    if (nearest) {\n      // Create imitation event\n      var event = {};\n      for (var i in evt) {\n        if (evt.hasOwnProperty(i)) {\n          event[i] = evt[i];\n        }\n      }\n      event.target = event.rootEl = nearest;\n      event.preventDefault = void 0;\n      event.stopPropagation = void 0;\n      nearest[expando]._onDragOver(event);\n    }\n  }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n  if (dragEl) {\n    dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n  }\n};\n\n/**\r\n * @class  Sortable\r\n * @param  {HTMLElement}  el\r\n * @param  {Object}       [options]\r\n */\nfunction Sortable(el, options) {\n  if (!(el && el.nodeType && el.nodeType === 1)) {\n    throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n  }\n  this.el = el; // root element\n  this.options = options = _extends({}, options);\n\n  // Export instance\n  el[expando] = this;\n  var defaults = {\n    group: null,\n    sort: true,\n    disabled: false,\n    store: null,\n    handle: null,\n    draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n    swapThreshold: 1,\n    // percentage; 0 <= x <= 1\n    invertSwap: false,\n    // invert always\n    invertedSwapThreshold: null,\n    // will be set to same as swapThreshold if default\n    removeCloneOnHide: true,\n    direction: function direction() {\n      return _detectDirection(el, this.options);\n    },\n    ghostClass: 'sortable-ghost',\n    chosenClass: 'sortable-chosen',\n    dragClass: 'sortable-drag',\n    ignore: 'a, img',\n    filter: null,\n    preventOnFilter: true,\n    animation: 0,\n    easing: null,\n    setData: function setData(dataTransfer, dragEl) {\n      dataTransfer.setData('Text', dragEl.textContent);\n    },\n    dropBubble: false,\n    dragoverBubble: false,\n    dataIdAttr: 'data-id',\n    delay: 0,\n    delayOnTouchOnly: false,\n    touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n    forceFallback: false,\n    fallbackClass: 'sortable-fallback',\n    fallbackOnBody: false,\n    fallbackTolerance: 0,\n    fallbackOffset: {\n      x: 0,\n      y: 0\n    },\n    // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n    supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n    emptyInsertThreshold: 5\n  };\n  PluginManager.initializePlugins(this, el, defaults);\n\n  // Set default options\n  for (var name in defaults) {\n    !(name in options) && (options[name] = defaults[name]);\n  }\n  _prepareGroup(options);\n\n  // Bind all private methods\n  for (var fn in this) {\n    if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n      this[fn] = this[fn].bind(this);\n    }\n  }\n\n  // Setup drag mode\n  this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n  if (this.nativeDraggable) {\n    // Touch start threshold cannot be greater than the native dragstart threshold\n    this.options.touchStartThreshold = 1;\n  }\n\n  // Bind events\n  if (options.supportPointer) {\n    on(el, 'pointerdown', this._onTapStart);\n  } else {\n    on(el, 'mousedown', this._onTapStart);\n    on(el, 'touchstart', this._onTapStart);\n  }\n  if (this.nativeDraggable) {\n    on(el, 'dragover', this);\n    on(el, 'dragenter', this);\n  }\n  sortables.push(this.el);\n\n  // Restore sorting\n  options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n  // Add animation state manager\n  _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n  constructor: Sortable,\n  _isOutsideThisEl: function _isOutsideThisEl(target) {\n    if (!this.el.contains(target) && target !== this.el) {\n      lastTarget = null;\n    }\n  },\n  _getDirection: function _getDirection(evt, target) {\n    return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n  },\n  _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n    if (!evt.cancelable) return;\n    var _this = this,\n      el = this.el,\n      options = this.options,\n      preventOnFilter = options.preventOnFilter,\n      type = evt.type,\n      touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n      target = (touch || evt).target,\n      originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n      filter = options.filter;\n    _saveInputCheckedState(el);\n\n    // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n    if (dragEl) {\n      return;\n    }\n    if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n      return; // only left button and enabled\n    }\n\n    // cancel dnd if original target is content editable\n    if (originalTarget.isContentEditable) {\n      return;\n    }\n\n    // Safari ignores further event handling after mousedown\n    if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n      return;\n    }\n    target = closest(target, options.draggable, el, false);\n    if (target && target.animated) {\n      return;\n    }\n    if (lastDownEl === target) {\n      // Ignoring duplicate `down`\n      return;\n    }\n\n    // Get the index of the dragged element within its parent\n    oldIndex = index(target);\n    oldDraggableIndex = index(target, options.draggable);\n\n    // Check filter\n    if (typeof filter === 'function') {\n      if (filter.call(this, evt, target, this)) {\n        _dispatchEvent({\n          sortable: _this,\n          rootEl: originalTarget,\n          name: 'filter',\n          targetEl: target,\n          toEl: el,\n          fromEl: el\n        });\n        pluginEvent('filter', _this, {\n          evt: evt\n        });\n        preventOnFilter && evt.preventDefault();\n        return; // cancel dnd\n      }\n    } else if (filter) {\n      filter = filter.split(',').some(function (criteria) {\n        criteria = closest(originalTarget, criteria.trim(), el, false);\n        if (criteria) {\n          _dispatchEvent({\n            sortable: _this,\n            rootEl: criteria,\n            name: 'filter',\n            targetEl: target,\n            fromEl: el,\n            toEl: el\n          });\n          pluginEvent('filter', _this, {\n            evt: evt\n          });\n          return true;\n        }\n      });\n      if (filter) {\n        preventOnFilter && evt.preventDefault();\n        return; // cancel dnd\n      }\n    }\n    if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n      return;\n    }\n\n    // Prepare `dragstart`\n    this._prepareDragStart(evt, touch, target);\n  },\n  _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n    var _this = this,\n      el = _this.el,\n      options = _this.options,\n      ownerDocument = el.ownerDocument,\n      dragStartFn;\n    if (target && !dragEl && target.parentNode === el) {\n      var dragRect = getRect(target);\n      rootEl = el;\n      dragEl = target;\n      parentEl = dragEl.parentNode;\n      nextEl = dragEl.nextSibling;\n      lastDownEl = target;\n      activeGroup = options.group;\n      Sortable.dragged = dragEl;\n      tapEvt = {\n        target: dragEl,\n        clientX: (touch || evt).clientX,\n        clientY: (touch || evt).clientY\n      };\n      tapDistanceLeft = tapEvt.clientX - dragRect.left;\n      tapDistanceTop = tapEvt.clientY - dragRect.top;\n      this._lastX = (touch || evt).clientX;\n      this._lastY = (touch || evt).clientY;\n      dragEl.style['will-change'] = 'all';\n      dragStartFn = function dragStartFn() {\n        pluginEvent('delayEnded', _this, {\n          evt: evt\n        });\n        if (Sortable.eventCanceled) {\n          _this._onDrop();\n          return;\n        }\n        // Delayed drag has been triggered\n        // we can re-enable the events: touchmove/mousemove\n        _this._disableDelayedDragEvents();\n        if (!FireFox && _this.nativeDraggable) {\n          dragEl.draggable = true;\n        }\n\n        // Bind the events: dragstart/dragend\n        _this._triggerDragStart(evt, touch);\n\n        // Drag start event\n        _dispatchEvent({\n          sortable: _this,\n          name: 'choose',\n          originalEvent: evt\n        });\n\n        // Chosen item\n        toggleClass(dragEl, options.chosenClass, true);\n      };\n\n      // Disable \"draggable\"\n      options.ignore.split(',').forEach(function (criteria) {\n        find(dragEl, criteria.trim(), _disableDraggable);\n      });\n      on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n      if (options.supportPointer) {\n        on(ownerDocument, 'pointerup', _this._onDrop);\n        // Native D&D triggers pointercancel\n        !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n      } else {\n        on(ownerDocument, 'mouseup', _this._onDrop);\n        on(ownerDocument, 'touchend', _this._onDrop);\n        on(ownerDocument, 'touchcancel', _this._onDrop);\n      }\n\n      // Make dragEl draggable (must be before delay for FireFox)\n      if (FireFox && this.nativeDraggable) {\n        this.options.touchStartThreshold = 4;\n        dragEl.draggable = true;\n      }\n      pluginEvent('delayStart', this, {\n        evt: evt\n      });\n\n      // Delay is impossible for native DnD in Edge or IE\n      if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n        if (Sortable.eventCanceled) {\n          this._onDrop();\n          return;\n        }\n        // If the user moves the pointer or let go the click or touch\n        // before the delay has been reached:\n        // disable the delayed drag\n        if (options.supportPointer) {\n          on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n          on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n        } else {\n          on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n          on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n          on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n        }\n        on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n        on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n        options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n        _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n      } else {\n        dragStartFn();\n      }\n    }\n  },\n  _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n    var touch = e.touches ? e.touches[0] : e;\n    if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n      this._disableDelayedDrag();\n    }\n  },\n  _disableDelayedDrag: function _disableDelayedDrag() {\n    dragEl && _disableDraggable(dragEl);\n    clearTimeout(this._dragStartTimer);\n    this._disableDelayedDragEvents();\n  },\n  _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n    off(ownerDocument, 'touchend', this._disableDelayedDrag);\n    off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n    off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n    off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n    off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n  },\n  _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n    touch = touch || evt.pointerType == 'touch' && evt;\n    if (!this.nativeDraggable || touch) {\n      if (this.options.supportPointer) {\n        on(document, 'pointermove', this._onTouchMove);\n      } else if (touch) {\n        on(document, 'touchmove', this._onTouchMove);\n      } else {\n        on(document, 'mousemove', this._onTouchMove);\n      }\n    } else {\n      on(dragEl, 'dragend', this);\n      on(rootEl, 'dragstart', this._onDragStart);\n    }\n    try {\n      if (document.selection) {\n        _nextTick(function () {\n          document.selection.empty();\n        });\n      } else {\n        window.getSelection().removeAllRanges();\n      }\n    } catch (err) {}\n  },\n  _dragStarted: function _dragStarted(fallback, evt) {\n    awaitingDragStarted = false;\n    if (rootEl && dragEl) {\n      pluginEvent('dragStarted', this, {\n        evt: evt\n      });\n      if (this.nativeDraggable) {\n        on(document, 'dragover', _checkOutsideTargetEl);\n      }\n      var options = this.options;\n\n      // Apply effect\n      !fallback && toggleClass(dragEl, options.dragClass, false);\n      toggleClass(dragEl, options.ghostClass, true);\n      Sortable.active = this;\n      fallback && this._appendGhost();\n\n      // Drag start event\n      _dispatchEvent({\n        sortable: this,\n        name: 'start',\n        originalEvent: evt\n      });\n    } else {\n      this._nulling();\n    }\n  },\n  _emulateDragOver: function _emulateDragOver() {\n    if (touchEvt) {\n      this._lastX = touchEvt.clientX;\n      this._lastY = touchEvt.clientY;\n      _hideGhostForTarget();\n      var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n      var parent = target;\n      while (target && target.shadowRoot) {\n        target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n        if (target === parent) break;\n        parent = target;\n      }\n      dragEl.parentNode[expando]._isOutsideThisEl(target);\n      if (parent) {\n        do {\n          if (parent[expando]) {\n            var inserted = void 0;\n            inserted = parent[expando]._onDragOver({\n              clientX: touchEvt.clientX,\n              clientY: touchEvt.clientY,\n              target: target,\n              rootEl: parent\n            });\n            if (inserted && !this.options.dragoverBubble) {\n              break;\n            }\n          }\n          target = parent; // store last element\n        }\n        /* jshint boss:true */ while (parent = getParentOrHost(parent));\n      }\n      _unhideGhostForTarget();\n    }\n  },\n  _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n    if (tapEvt) {\n      var options = this.options,\n        fallbackTolerance = options.fallbackTolerance,\n        fallbackOffset = options.fallbackOffset,\n        touch = evt.touches ? evt.touches[0] : evt,\n        ghostMatrix = ghostEl && matrix(ghostEl, true),\n        scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n        scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n        relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n        dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n        dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n      // only set the status to dragging, when we are actually dragging\n      if (!Sortable.active && !awaitingDragStarted) {\n        if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n          return;\n        }\n        this._onDragStart(evt, true);\n      }\n      if (ghostEl) {\n        if (ghostMatrix) {\n          ghostMatrix.e += dx - (lastDx || 0);\n          ghostMatrix.f += dy - (lastDy || 0);\n        } else {\n          ghostMatrix = {\n            a: 1,\n            b: 0,\n            c: 0,\n            d: 1,\n            e: dx,\n            f: dy\n          };\n        }\n        var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n        css(ghostEl, 'webkitTransform', cssMatrix);\n        css(ghostEl, 'mozTransform', cssMatrix);\n        css(ghostEl, 'msTransform', cssMatrix);\n        css(ghostEl, 'transform', cssMatrix);\n        lastDx = dx;\n        lastDy = dy;\n        touchEvt = touch;\n      }\n      evt.cancelable && evt.preventDefault();\n    }\n  },\n  _appendGhost: function _appendGhost() {\n    // Bug if using scale(): https://stackoverflow.com/questions/2637058\n    // Not being adjusted for\n    if (!ghostEl) {\n      var container = this.options.fallbackOnBody ? document.body : rootEl,\n        rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n        options = this.options;\n\n      // Position absolutely\n      if (PositionGhostAbsolutely) {\n        // Get relatively positioned parent\n        ghostRelativeParent = container;\n        while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n          ghostRelativeParent = ghostRelativeParent.parentNode;\n        }\n        if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n          if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n          rect.top += ghostRelativeParent.scrollTop;\n          rect.left += ghostRelativeParent.scrollLeft;\n        } else {\n          ghostRelativeParent = getWindowScrollingElement();\n        }\n        ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n      }\n      ghostEl = dragEl.cloneNode(true);\n      toggleClass(ghostEl, options.ghostClass, false);\n      toggleClass(ghostEl, options.fallbackClass, true);\n      toggleClass(ghostEl, options.dragClass, true);\n      css(ghostEl, 'transition', '');\n      css(ghostEl, 'transform', '');\n      css(ghostEl, 'box-sizing', 'border-box');\n      css(ghostEl, 'margin', 0);\n      css(ghostEl, 'top', rect.top);\n      css(ghostEl, 'left', rect.left);\n      css(ghostEl, 'width', rect.width);\n      css(ghostEl, 'height', rect.height);\n      css(ghostEl, 'opacity', '0.8');\n      css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n      css(ghostEl, 'zIndex', '100000');\n      css(ghostEl, 'pointerEvents', 'none');\n      Sortable.ghost = ghostEl;\n      container.appendChild(ghostEl);\n\n      // Set transform-origin\n      css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n    }\n  },\n  _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n    var _this = this;\n    var dataTransfer = evt.dataTransfer;\n    var options = _this.options;\n    pluginEvent('dragStart', this, {\n      evt: evt\n    });\n    if (Sortable.eventCanceled) {\n      this._onDrop();\n      return;\n    }\n    pluginEvent('setupClone', this);\n    if (!Sortable.eventCanceled) {\n      cloneEl = clone(dragEl);\n      cloneEl.removeAttribute(\"id\");\n      cloneEl.draggable = false;\n      cloneEl.style['will-change'] = '';\n      this._hideClone();\n      toggleClass(cloneEl, this.options.chosenClass, false);\n      Sortable.clone = cloneEl;\n    }\n\n    // #1143: IFrame support workaround\n    _this.cloneId = _nextTick(function () {\n      pluginEvent('clone', _this);\n      if (Sortable.eventCanceled) return;\n      if (!_this.options.removeCloneOnHide) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      }\n      _this._hideClone();\n      _dispatchEvent({\n        sortable: _this,\n        name: 'clone'\n      });\n    });\n    !fallback && toggleClass(dragEl, options.dragClass, true);\n\n    // Set proper drop events\n    if (fallback) {\n      ignoreNextClick = true;\n      _this._loopId = setInterval(_this._emulateDragOver, 50);\n    } else {\n      // Undo what was set in _prepareDragStart before drag started\n      off(document, 'mouseup', _this._onDrop);\n      off(document, 'touchend', _this._onDrop);\n      off(document, 'touchcancel', _this._onDrop);\n      if (dataTransfer) {\n        dataTransfer.effectAllowed = 'move';\n        options.setData && options.setData.call(_this, dataTransfer, dragEl);\n      }\n      on(document, 'drop', _this);\n\n      // #1276 fix:\n      css(dragEl, 'transform', 'translateZ(0)');\n    }\n    awaitingDragStarted = true;\n    _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n    on(document, 'selectstart', _this);\n    moved = true;\n    window.getSelection().removeAllRanges();\n    if (Safari) {\n      css(document.body, 'user-select', 'none');\n    }\n  },\n  // Returns true - if no further action is needed (either inserted or another condition)\n  _onDragOver: function _onDragOver( /**Event*/evt) {\n    var el = this.el,\n      target = evt.target,\n      dragRect,\n      targetRect,\n      revert,\n      options = this.options,\n      group = options.group,\n      activeSortable = Sortable.active,\n      isOwner = activeGroup === group,\n      canSort = options.sort,\n      fromSortable = putSortable || activeSortable,\n      vertical,\n      _this = this,\n      completedFired = false;\n    if (_silent) return;\n    function dragOverEvent(name, extra) {\n      pluginEvent(name, _this, _objectSpread2({\n        evt: evt,\n        isOwner: isOwner,\n        axis: vertical ? 'vertical' : 'horizontal',\n        revert: revert,\n        dragRect: dragRect,\n        targetRect: targetRect,\n        canSort: canSort,\n        fromSortable: fromSortable,\n        target: target,\n        completed: completed,\n        onMove: function onMove(target, after) {\n          return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n        },\n        changed: changed\n      }, extra));\n    }\n\n    // Capture animation state\n    function capture() {\n      dragOverEvent('dragOverAnimationCapture');\n      _this.captureAnimationState();\n      if (_this !== fromSortable) {\n        fromSortable.captureAnimationState();\n      }\n    }\n\n    // Return invocation when dragEl is inserted (or completed)\n    function completed(insertion) {\n      dragOverEvent('dragOverCompleted', {\n        insertion: insertion\n      });\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        } else {\n          activeSortable._showClone(_this);\n        }\n        if (_this !== fromSortable) {\n          // Set ghost class to new sortable's ghost class\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n          toggleClass(dragEl, options.ghostClass, true);\n        }\n        if (putSortable !== _this && _this !== Sortable.active) {\n          putSortable = _this;\n        } else if (_this === Sortable.active && putSortable) {\n          putSortable = null;\n        }\n\n        // Animation\n        if (fromSortable === _this) {\n          _this._ignoreWhileAnimating = target;\n        }\n        _this.animateAll(function () {\n          dragOverEvent('dragOverAnimationComplete');\n          _this._ignoreWhileAnimating = null;\n        });\n        if (_this !== fromSortable) {\n          fromSortable.animateAll();\n          fromSortable._ignoreWhileAnimating = null;\n        }\n      }\n\n      // Null lastTarget if it is not inside a previously swapped element\n      if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n        lastTarget = null;\n      }\n\n      // no bubbling and not fallback\n      if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n        dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n        // Do not detect for empty insert if already inserted\n        !insertion && nearestEmptyInsertDetectEvent(evt);\n      }\n      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n      return completedFired = true;\n    }\n\n    // Call when dragEl has been inserted\n    function changed() {\n      newIndex = index(dragEl);\n      newDraggableIndex = index(dragEl, options.draggable);\n      _dispatchEvent({\n        sortable: _this,\n        name: 'change',\n        toEl: el,\n        newIndex: newIndex,\n        newDraggableIndex: newDraggableIndex,\n        originalEvent: evt\n      });\n    }\n    if (evt.preventDefault !== void 0) {\n      evt.cancelable && evt.preventDefault();\n    }\n    target = closest(target, options.draggable, el, true);\n    dragOverEvent('dragOver');\n    if (Sortable.eventCanceled) return completedFired;\n    if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n      return completed(false);\n    }\n    ignoreNextClick = false;\n    if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n    : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n      vertical = this._getDirection(evt, target) === 'vertical';\n      dragRect = getRect(dragEl);\n      dragOverEvent('dragOverValid');\n      if (Sortable.eventCanceled) return completedFired;\n      if (revert) {\n        parentEl = rootEl; // actualization\n        capture();\n        this._hideClone();\n        dragOverEvent('revert');\n        if (!Sortable.eventCanceled) {\n          if (nextEl) {\n            rootEl.insertBefore(dragEl, nextEl);\n          } else {\n            rootEl.appendChild(dragEl);\n          }\n        }\n        return completed(true);\n      }\n      var elLastChild = lastChild(el, options.draggable);\n      if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n        // Insert to end of list\n\n        // If already at end of list: Do not insert\n        if (elLastChild === dragEl) {\n          return completed(false);\n        }\n\n        // if there is a last element, it is the target\n        if (elLastChild && el === evt.target) {\n          target = elLastChild;\n        }\n        if (target) {\n          targetRect = getRect(target);\n        }\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n          capture();\n          if (elLastChild && elLastChild.nextSibling) {\n            // the last draggable element is not the last node\n            el.insertBefore(dragEl, elLastChild.nextSibling);\n          } else {\n            el.appendChild(dragEl);\n          }\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n        // Insert to start of list\n        var firstChild = getChild(el, 0, options, true);\n        if (firstChild === dragEl) {\n          return completed(false);\n        }\n        target = firstChild;\n        targetRect = getRect(target);\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n          capture();\n          el.insertBefore(dragEl, firstChild);\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (target.parentNode === el) {\n        targetRect = getRect(target);\n        var direction = 0,\n          targetBeforeFirstSwap,\n          differentLevel = dragEl.parentNode !== el,\n          differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n          side1 = vertical ? 'top' : 'left',\n          scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n          scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n        if (lastTarget !== target) {\n          targetBeforeFirstSwap = targetRect[side1];\n          pastFirstInvertThresh = false;\n          isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n        }\n        direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n        var sibling;\n        if (direction !== 0) {\n          // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n          var dragIndex = index(dragEl);\n          do {\n            dragIndex -= direction;\n            sibling = parentEl.children[dragIndex];\n          } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n        }\n        // If dragEl is already beside target: Do not insert\n        if (direction === 0 || sibling === target) {\n          return completed(false);\n        }\n        lastTarget = target;\n        lastDirection = direction;\n        var nextSibling = target.nextElementSibling,\n          after = false;\n        after = direction === 1;\n        var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n        if (moveVector !== false) {\n          if (moveVector === 1 || moveVector === -1) {\n            after = moveVector === 1;\n          }\n          _silent = true;\n          setTimeout(_unsilent, 30);\n          capture();\n          if (after && !nextSibling) {\n            el.appendChild(dragEl);\n          } else {\n            target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n          }\n\n          // Undo chrome's scroll adjustment (has no effect on other browsers)\n          if (scrolledPastTop) {\n            scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n          }\n          parentEl = dragEl.parentNode; // actualization\n\n          // must be done before animation\n          if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n            targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n          }\n          changed();\n          return completed(true);\n        }\n      }\n      if (el.contains(dragEl)) {\n        return completed(false);\n      }\n    }\n    return false;\n  },\n  _ignoreWhileAnimating: null,\n  _offMoveEvents: function _offMoveEvents() {\n    off(document, 'mousemove', this._onTouchMove);\n    off(document, 'touchmove', this._onTouchMove);\n    off(document, 'pointermove', this._onTouchMove);\n    off(document, 'dragover', nearestEmptyInsertDetectEvent);\n    off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n    off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n  },\n  _offUpEvents: function _offUpEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._onDrop);\n    off(ownerDocument, 'touchend', this._onDrop);\n    off(ownerDocument, 'pointerup', this._onDrop);\n    off(ownerDocument, 'pointercancel', this._onDrop);\n    off(ownerDocument, 'touchcancel', this._onDrop);\n    off(document, 'selectstart', this);\n  },\n  _onDrop: function _onDrop( /**Event*/evt) {\n    var el = this.el,\n      options = this.options;\n\n    // Get the index of the dragged element within its parent\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    pluginEvent('drop', this, {\n      evt: evt\n    });\n    parentEl = dragEl && dragEl.parentNode;\n\n    // Get again after plugin event\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    if (Sortable.eventCanceled) {\n      this._nulling();\n      return;\n    }\n    awaitingDragStarted = false;\n    isCircumstantialInvert = false;\n    pastFirstInvertThresh = false;\n    clearInterval(this._loopId);\n    clearTimeout(this._dragStartTimer);\n    _cancelNextTick(this.cloneId);\n    _cancelNextTick(this._dragStartId);\n\n    // Unbind events\n    if (this.nativeDraggable) {\n      off(document, 'drop', this);\n      off(el, 'dragstart', this._onDragStart);\n    }\n    this._offMoveEvents();\n    this._offUpEvents();\n    if (Safari) {\n      css(document.body, 'user-select', '');\n    }\n    css(dragEl, 'transform', '');\n    if (evt) {\n      if (moved) {\n        evt.cancelable && evt.preventDefault();\n        !options.dropBubble && evt.stopPropagation();\n      }\n      ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        // Remove clone(s)\n        cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n      }\n      if (dragEl) {\n        if (this.nativeDraggable) {\n          off(dragEl, 'dragend', this);\n        }\n        _disableDraggable(dragEl);\n        dragEl.style['will-change'] = '';\n\n        // Remove classes\n        // ghostClass is added in dragStarted\n        if (moved && !awaitingDragStarted) {\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n        }\n        toggleClass(dragEl, this.options.chosenClass, false);\n\n        // Drag stop event\n        _dispatchEvent({\n          sortable: this,\n          name: 'unchoose',\n          toEl: parentEl,\n          newIndex: null,\n          newDraggableIndex: null,\n          originalEvent: evt\n        });\n        if (rootEl !== parentEl) {\n          if (newIndex >= 0) {\n            // Add event\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'add',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            });\n\n            // Remove event\n            _dispatchEvent({\n              sortable: this,\n              name: 'remove',\n              toEl: parentEl,\n              originalEvent: evt\n            });\n\n            // drag from one list and drop into another\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'sort',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            });\n            _dispatchEvent({\n              sortable: this,\n              name: 'sort',\n              toEl: parentEl,\n              originalEvent: evt\n            });\n          }\n          putSortable && putSortable.save();\n        } else {\n          if (newIndex !== oldIndex) {\n            if (newIndex >= 0) {\n              // drag & drop within the same list\n              _dispatchEvent({\n                sortable: this,\n                name: 'update',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n              _dispatchEvent({\n                sortable: this,\n                name: 'sort',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n            }\n          }\n        }\n        if (Sortable.active) {\n          /* jshint eqnull:true */\n          if (newIndex == null || newIndex === -1) {\n            newIndex = oldIndex;\n            newDraggableIndex = oldDraggableIndex;\n          }\n          _dispatchEvent({\n            sortable: this,\n            name: 'end',\n            toEl: parentEl,\n            originalEvent: evt\n          });\n\n          // Save sorting\n          this.save();\n        }\n      }\n    }\n    this._nulling();\n  },\n  _nulling: function _nulling() {\n    pluginEvent('nulling', this);\n    rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n    savedInputChecked.forEach(function (el) {\n      el.checked = true;\n    });\n    savedInputChecked.length = lastDx = lastDy = 0;\n  },\n  handleEvent: function handleEvent( /**Event*/evt) {\n    switch (evt.type) {\n      case 'drop':\n      case 'dragend':\n        this._onDrop(evt);\n        break;\n      case 'dragenter':\n      case 'dragover':\n        if (dragEl) {\n          this._onDragOver(evt);\n          _globalDragOver(evt);\n        }\n        break;\n      case 'selectstart':\n        evt.preventDefault();\n        break;\n    }\n  },\n  /**\r\n   * Serializes the item into an array of string.\r\n   * @returns {String[]}\r\n   */\n  toArray: function toArray() {\n    var order = [],\n      el,\n      children = this.el.children,\n      i = 0,\n      n = children.length,\n      options = this.options;\n    for (; i < n; i++) {\n      el = children[i];\n      if (closest(el, options.draggable, this.el, false)) {\n        order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n      }\n    }\n    return order;\n  },\n  /**\r\n   * Sorts the elements according to the array.\r\n   * @param  {String[]}  order  order of the items\r\n   */\n  sort: function sort(order, useAnimation) {\n    var items = {},\n      rootEl = this.el;\n    this.toArray().forEach(function (id, i) {\n      var el = rootEl.children[i];\n      if (closest(el, this.options.draggable, rootEl, false)) {\n        items[id] = el;\n      }\n    }, this);\n    useAnimation && this.captureAnimationState();\n    order.forEach(function (id) {\n      if (items[id]) {\n        rootEl.removeChild(items[id]);\n        rootEl.appendChild(items[id]);\n      }\n    });\n    useAnimation && this.animateAll();\n  },\n  /**\r\n   * Save the current sorting\r\n   */\n  save: function save() {\n    var store = this.options.store;\n    store && store.set && store.set(this);\n  },\n  /**\r\n   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n   * @param   {HTMLElement}  el\r\n   * @param   {String}       [selector]  default: `options.draggable`\r\n   * @returns {HTMLElement|null}\r\n   */\n  closest: function closest$1(el, selector) {\n    return closest(el, selector || this.options.draggable, this.el, false);\n  },\n  /**\r\n   * Set/get option\r\n   * @param   {string} name\r\n   * @param   {*}      [value]\r\n   * @returns {*}\r\n   */\n  option: function option(name, value) {\n    var options = this.options;\n    if (value === void 0) {\n      return options[name];\n    } else {\n      var modifiedValue = PluginManager.modifyOption(this, name, value);\n      if (typeof modifiedValue !== 'undefined') {\n        options[name] = modifiedValue;\n      } else {\n        options[name] = value;\n      }\n      if (name === 'group') {\n        _prepareGroup(options);\n      }\n    }\n  },\n  /**\r\n   * Destroy\r\n   */\n  destroy: function destroy() {\n    pluginEvent('destroy', this);\n    var el = this.el;\n    el[expando] = null;\n    off(el, 'mousedown', this._onTapStart);\n    off(el, 'touchstart', this._onTapStart);\n    off(el, 'pointerdown', this._onTapStart);\n    if (this.nativeDraggable) {\n      off(el, 'dragover', this);\n      off(el, 'dragenter', this);\n    }\n    // Remove draggable attributes\n    Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n      el.removeAttribute('draggable');\n    });\n    this._onDrop();\n    this._disableDelayedDragEvents();\n    sortables.splice(sortables.indexOf(this.el), 1);\n    this.el = el = null;\n  },\n  _hideClone: function _hideClone() {\n    if (!cloneHidden) {\n      pluginEvent('hideClone', this);\n      if (Sortable.eventCanceled) return;\n      css(cloneEl, 'display', 'none');\n      if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n        cloneEl.parentNode.removeChild(cloneEl);\n      }\n      cloneHidden = true;\n    }\n  },\n  _showClone: function _showClone(putSortable) {\n    if (putSortable.lastPutMode !== 'clone') {\n      this._hideClone();\n      return;\n    }\n    if (cloneHidden) {\n      pluginEvent('showClone', this);\n      if (Sortable.eventCanceled) return;\n\n      // show clone at dragEl or original position\n      if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      } else if (nextEl) {\n        rootEl.insertBefore(cloneEl, nextEl);\n      } else {\n        rootEl.appendChild(cloneEl);\n      }\n      if (this.options.group.revertClone) {\n        this.animate(dragEl, cloneEl);\n      }\n      css(cloneEl, 'display', '');\n      cloneHidden = false;\n    }\n  }\n};\nfunction _globalDragOver( /**Event*/evt) {\n  if (evt.dataTransfer) {\n    evt.dataTransfer.dropEffect = 'move';\n  }\n  evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n  var evt,\n    sortable = fromEl[expando],\n    onMoveFn = sortable.options.onMove,\n    retVal;\n  // Support for new CustomEvent feature\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent('move', {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent('move', true, true);\n  }\n  evt.to = toEl;\n  evt.from = fromEl;\n  evt.dragged = dragEl;\n  evt.draggedRect = dragRect;\n  evt.related = targetEl || toEl;\n  evt.relatedRect = targetRect || getRect(toEl);\n  evt.willInsertAfter = willInsertAfter;\n  evt.originalEvent = originalEvent;\n  fromEl.dispatchEvent(evt);\n  if (onMoveFn) {\n    retVal = onMoveFn.call(sortable, evt, originalEvent);\n  }\n  return retVal;\n}\nfunction _disableDraggable(el) {\n  el.draggable = false;\n}\nfunction _unsilent() {\n  _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n  var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n  var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n  var spacer = 10;\n  return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n  var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n  var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n  var spacer = 10;\n  return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n  var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n    targetLength = vertical ? targetRect.height : targetRect.width,\n    targetS1 = vertical ? targetRect.top : targetRect.left,\n    targetS2 = vertical ? targetRect.bottom : targetRect.right,\n    invert = false;\n  if (!invertSwap) {\n    // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n    if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n      // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n      // check if past first invert threshold on side opposite of lastDirection\n      if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n        // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n        pastFirstInvertThresh = true;\n      }\n      if (!pastFirstInvertThresh) {\n        // dragEl shadow (target move distance shadow)\n        if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n        : mouseOnAxis > targetS2 - targetMoveDistance) {\n          return -lastDirection;\n        }\n      } else {\n        invert = true;\n      }\n    } else {\n      // Regular\n      if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n        return _getInsertDirection(target);\n      }\n    }\n  }\n  invert = invert || invertSwap;\n  if (invert) {\n    // Invert of regular\n    if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n      return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n    }\n  }\n  return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param  {HTMLElement} target       The target whose position dragEl is being inserted at\r\n * @return {Number}                   Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n  if (index(dragEl) < index(target)) {\n    return 1;\n  } else {\n    return -1;\n  }\n}\n\n/**\r\n * Generate id\r\n * @param   {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n  var str = el.tagName + el.className + el.src + el.href + el.textContent,\n    i = str.length,\n    sum = 0;\n  while (i--) {\n    sum += str.charCodeAt(i);\n  }\n  return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n  savedInputChecked.length = 0;\n  var inputs = root.getElementsByTagName('input');\n  var idx = inputs.length;\n  while (idx--) {\n    var el = inputs[idx];\n    el.checked && savedInputChecked.push(el);\n  }\n}\nfunction _nextTick(fn) {\n  return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n  return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n  on(document, 'touchmove', function (evt) {\n    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n      evt.preventDefault();\n    }\n  });\n}\n\n// Export utils\nSortable.utils = {\n  on: on,\n  off: off,\n  css: css,\n  find: find,\n  is: function is(el, selector) {\n    return !!closest(el, selector, el, false);\n  },\n  extend: extend,\n  throttle: throttle,\n  closest: closest,\n  toggleClass: toggleClass,\n  clone: clone,\n  index: index,\n  nextTick: _nextTick,\n  cancelNextTick: _cancelNextTick,\n  detectDirection: _detectDirection,\n  getChild: getChild,\n  expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param  {HTMLElement} element The element\r\n * @return {Sortable|undefined}         The instance of Sortable\r\n */\nSortable.get = function (element) {\n  return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted\r\n */\nSortable.mount = function () {\n  for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n    plugins[_key] = arguments[_key];\n  }\n  if (plugins[0].constructor === Array) plugins = plugins[0];\n  plugins.forEach(function (plugin) {\n    if (!plugin.prototype || !plugin.prototype.constructor) {\n      throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n    }\n    if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n    PluginManager.mount(plugin);\n  });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement}  el\r\n * @param {Object}      [options]\r\n */\nSortable.create = function (el, options) {\n  return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n  scrollEl,\n  scrollRootEl,\n  scrolling = false,\n  lastAutoScrollX,\n  lastAutoScrollY,\n  touchEvt$1,\n  pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n  function AutoScroll() {\n    this.defaults = {\n      scroll: true,\n      forceAutoScrollFallback: false,\n      scrollSensitivity: 30,\n      scrollSpeed: 10,\n      bubbleScroll: true\n    };\n\n    // Bind all private methods\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n  }\n  AutoScroll.prototype = {\n    dragStarted: function dragStarted(_ref) {\n      var originalEvent = _ref.originalEvent;\n      if (this.sortable.nativeDraggable) {\n        on(document, 'dragover', this._handleAutoScroll);\n      } else {\n        if (this.options.supportPointer) {\n          on(document, 'pointermove', this._handleFallbackAutoScroll);\n        } else if (originalEvent.touches) {\n          on(document, 'touchmove', this._handleFallbackAutoScroll);\n        } else {\n          on(document, 'mousemove', this._handleFallbackAutoScroll);\n        }\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref2) {\n      var originalEvent = _ref2.originalEvent;\n      // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n      if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n        this._handleAutoScroll(originalEvent);\n      }\n    },\n    drop: function drop() {\n      if (this.sortable.nativeDraggable) {\n        off(document, 'dragover', this._handleAutoScroll);\n      } else {\n        off(document, 'pointermove', this._handleFallbackAutoScroll);\n        off(document, 'touchmove', this._handleFallbackAutoScroll);\n        off(document, 'mousemove', this._handleFallbackAutoScroll);\n      }\n      clearPointerElemChangedInterval();\n      clearAutoScrolls();\n      cancelThrottle();\n    },\n    nulling: function nulling() {\n      touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n      autoScrolls.length = 0;\n    },\n    _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n      this._handleAutoScroll(evt, true);\n    },\n    _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n      var _this = this;\n      var x = (evt.touches ? evt.touches[0] : evt).clientX,\n        y = (evt.touches ? evt.touches[0] : evt).clientY,\n        elem = document.elementFromPoint(x, y);\n      touchEvt$1 = evt;\n\n      // IE does not seem to have native autoscroll,\n      // Edge's autoscroll seems too conditional,\n      // MACOS Safari does not have autoscroll,\n      // Firefox and Chrome are good\n      if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n        autoScroll(evt, this.options, elem, fallback);\n\n        // Listener for pointer element change\n        var ogElemScroller = getParentAutoScrollElement(elem, true);\n        if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n          pointerElemChangedInterval && clearPointerElemChangedInterval();\n          // Detect for pointer elem change, emulating native DnD behaviour\n          pointerElemChangedInterval = setInterval(function () {\n            var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n            if (newElem !== ogElemScroller) {\n              ogElemScroller = newElem;\n              clearAutoScrolls();\n            }\n            autoScroll(evt, _this.options, newElem, fallback);\n          }, 10);\n          lastAutoScrollX = x;\n          lastAutoScrollY = y;\n        }\n      } else {\n        // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n        if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n          clearAutoScrolls();\n          return;\n        }\n        autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n      }\n    }\n  };\n  return _extends(AutoScroll, {\n    pluginName: 'scroll',\n    initializeByDefault: true\n  });\n}\nfunction clearAutoScrolls() {\n  autoScrolls.forEach(function (autoScroll) {\n    clearInterval(autoScroll.pid);\n  });\n  autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n  clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n  if (!options.scroll) return;\n  var x = (evt.touches ? evt.touches[0] : evt).clientX,\n    y = (evt.touches ? evt.touches[0] : evt).clientY,\n    sens = options.scrollSensitivity,\n    speed = options.scrollSpeed,\n    winScroller = getWindowScrollingElement();\n  var scrollThisInstance = false,\n    scrollCustomFn;\n\n  // New scroll root, set scrollEl\n  if (scrollRootEl !== rootEl) {\n    scrollRootEl = rootEl;\n    clearAutoScrolls();\n    scrollEl = options.scroll;\n    scrollCustomFn = options.scrollFn;\n    if (scrollEl === true) {\n      scrollEl = getParentAutoScrollElement(rootEl, true);\n    }\n  }\n  var layersOut = 0;\n  var currentParent = scrollEl;\n  do {\n    var el = currentParent,\n      rect = getRect(el),\n      top = rect.top,\n      bottom = rect.bottom,\n      left = rect.left,\n      right = rect.right,\n      width = rect.width,\n      height = rect.height,\n      canScrollX = void 0,\n      canScrollY = void 0,\n      scrollWidth = el.scrollWidth,\n      scrollHeight = el.scrollHeight,\n      elCSS = css(el),\n      scrollPosX = el.scrollLeft,\n      scrollPosY = el.scrollTop;\n    if (el === winScroller) {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n    } else {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n    }\n    var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n    var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n    if (!autoScrolls[layersOut]) {\n      for (var i = 0; i <= layersOut; i++) {\n        if (!autoScrolls[i]) {\n          autoScrolls[i] = {};\n        }\n      }\n    }\n    if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n      autoScrolls[layersOut].el = el;\n      autoScrolls[layersOut].vx = vx;\n      autoScrolls[layersOut].vy = vy;\n      clearInterval(autoScrolls[layersOut].pid);\n      if (vx != 0 || vy != 0) {\n        scrollThisInstance = true;\n        /* jshint loopfunc:true */\n        autoScrolls[layersOut].pid = setInterval(function () {\n          // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n          if (isFallback && this.layer === 0) {\n            Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n          }\n          var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n          var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n          if (typeof scrollCustomFn === 'function') {\n            if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n              return;\n            }\n          }\n          scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n        }.bind({\n          layer: layersOut\n        }), 24);\n      }\n    }\n    layersOut++;\n  } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n  scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n  var originalEvent = _ref.originalEvent,\n    putSortable = _ref.putSortable,\n    dragEl = _ref.dragEl,\n    activeSortable = _ref.activeSortable,\n    dispatchSortableEvent = _ref.dispatchSortableEvent,\n    hideGhostForTarget = _ref.hideGhostForTarget,\n    unhideGhostForTarget = _ref.unhideGhostForTarget;\n  if (!originalEvent) return;\n  var toSortable = putSortable || activeSortable;\n  hideGhostForTarget();\n  var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n  var target = document.elementFromPoint(touch.clientX, touch.clientY);\n  unhideGhostForTarget();\n  if (toSortable && !toSortable.el.contains(target)) {\n    dispatchSortableEvent('spill');\n    this.onSpill({\n      dragEl: dragEl,\n      putSortable: putSortable\n    });\n  }\n};\nfunction Revert() {}\nRevert.prototype = {\n  startIndex: null,\n  dragStart: function dragStart(_ref2) {\n    var oldDraggableIndex = _ref2.oldDraggableIndex;\n    this.startIndex = oldDraggableIndex;\n  },\n  onSpill: function onSpill(_ref3) {\n    var dragEl = _ref3.dragEl,\n      putSortable = _ref3.putSortable;\n    this.sortable.captureAnimationState();\n    if (putSortable) {\n      putSortable.captureAnimationState();\n    }\n    var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n    if (nextSibling) {\n      this.sortable.el.insertBefore(dragEl, nextSibling);\n    } else {\n      this.sortable.el.appendChild(dragEl);\n    }\n    this.sortable.animateAll();\n    if (putSortable) {\n      putSortable.animateAll();\n    }\n  },\n  drop: drop\n};\n_extends(Revert, {\n  pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n  onSpill: function onSpill(_ref4) {\n    var dragEl = _ref4.dragEl,\n      putSortable = _ref4.putSortable;\n    var parentSortable = putSortable || this.sortable;\n    parentSortable.captureAnimationState();\n    dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n    parentSortable.animateAll();\n  },\n  drop: drop\n};\n_extends(Remove, {\n  pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n  function Swap() {\n    this.defaults = {\n      swapClass: 'sortable-swap-highlight'\n    };\n  }\n  Swap.prototype = {\n    dragStart: function dragStart(_ref) {\n      var dragEl = _ref.dragEl;\n      lastSwapEl = dragEl;\n    },\n    dragOverValid: function dragOverValid(_ref2) {\n      var completed = _ref2.completed,\n        target = _ref2.target,\n        onMove = _ref2.onMove,\n        activeSortable = _ref2.activeSortable,\n        changed = _ref2.changed,\n        cancel = _ref2.cancel;\n      if (!activeSortable.options.swap) return;\n      var el = this.sortable.el,\n        options = this.options;\n      if (target && target !== el) {\n        var prevSwapEl = lastSwapEl;\n        if (onMove(target) !== false) {\n          toggleClass(target, options.swapClass, true);\n          lastSwapEl = target;\n        } else {\n          lastSwapEl = null;\n        }\n        if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n          toggleClass(prevSwapEl, options.swapClass, false);\n        }\n      }\n      changed();\n      completed(true);\n      cancel();\n    },\n    drop: function drop(_ref3) {\n      var activeSortable = _ref3.activeSortable,\n        putSortable = _ref3.putSortable,\n        dragEl = _ref3.dragEl;\n      var toSortable = putSortable || this.sortable;\n      var options = this.options;\n      lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n      if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n        if (dragEl !== lastSwapEl) {\n          toSortable.captureAnimationState();\n          if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n          swapNodes(dragEl, lastSwapEl);\n          toSortable.animateAll();\n          if (toSortable !== activeSortable) activeSortable.animateAll();\n        }\n      }\n    },\n    nulling: function nulling() {\n      lastSwapEl = null;\n    }\n  };\n  return _extends(Swap, {\n    pluginName: 'swap',\n    eventProperties: function eventProperties() {\n      return {\n        swapItem: lastSwapEl\n      };\n    }\n  });\n}\nfunction swapNodes(n1, n2) {\n  var p1 = n1.parentNode,\n    p2 = n2.parentNode,\n    i1,\n    i2;\n  if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n  i1 = index(n1);\n  i2 = index(n2);\n  if (p1.isEqualNode(p2) && i1 < i2) {\n    i2++;\n  }\n  p1.insertBefore(n2, p1.children[i1]);\n  p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n  multiDragClones = [],\n  lastMultiDragSelect,\n  // for selection with modifier key down (SHIFT)\n  multiDragSortable,\n  initialFolding = false,\n  // Initial multi-drag fold when drag started\n  folding = false,\n  // Folding any other time\n  dragStarted = false,\n  dragEl$1,\n  clonesFromRect,\n  clonesHidden;\nfunction MultiDragPlugin() {\n  function MultiDrag(sortable) {\n    // Bind all private methods\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n    if (!sortable.options.avoidImplicitDeselect) {\n      if (sortable.options.supportPointer) {\n        on(document, 'pointerup', this._deselectMultiDrag);\n      } else {\n        on(document, 'mouseup', this._deselectMultiDrag);\n        on(document, 'touchend', this._deselectMultiDrag);\n      }\n    }\n    on(document, 'keydown', this._checkKeyDown);\n    on(document, 'keyup', this._checkKeyUp);\n    this.defaults = {\n      selectedClass: 'sortable-selected',\n      multiDragKey: null,\n      avoidImplicitDeselect: false,\n      setData: function setData(dataTransfer, dragEl) {\n        var data = '';\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          multiDragElements.forEach(function (multiDragElement, i) {\n            data += (!i ? '' : ', ') + multiDragElement.textContent;\n          });\n        } else {\n          data = dragEl.textContent;\n        }\n        dataTransfer.setData('Text', data);\n      }\n    };\n  }\n  MultiDrag.prototype = {\n    multiDragKeyDown: false,\n    isMultiDrag: false,\n    delayStartGlobal: function delayStartGlobal(_ref) {\n      var dragged = _ref.dragEl;\n      dragEl$1 = dragged;\n    },\n    delayEnded: function delayEnded() {\n      this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n    },\n    setupClone: function setupClone(_ref2) {\n      var sortable = _ref2.sortable,\n        cancel = _ref2.cancel;\n      if (!this.isMultiDrag) return;\n      for (var i = 0; i < multiDragElements.length; i++) {\n        multiDragClones.push(clone(multiDragElements[i]));\n        multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n        multiDragClones[i].draggable = false;\n        multiDragClones[i].style['will-change'] = '';\n        toggleClass(multiDragClones[i], this.options.selectedClass, false);\n        multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n      }\n      sortable._hideClone();\n      cancel();\n    },\n    clone: function clone(_ref3) {\n      var sortable = _ref3.sortable,\n        rootEl = _ref3.rootEl,\n        dispatchSortableEvent = _ref3.dispatchSortableEvent,\n        cancel = _ref3.cancel;\n      if (!this.isMultiDrag) return;\n      if (!this.options.removeCloneOnHide) {\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          insertMultiDragClones(true, rootEl);\n          dispatchSortableEvent('clone');\n          cancel();\n        }\n      }\n    },\n    showClone: function showClone(_ref4) {\n      var cloneNowShown = _ref4.cloneNowShown,\n        rootEl = _ref4.rootEl,\n        cancel = _ref4.cancel;\n      if (!this.isMultiDrag) return;\n      insertMultiDragClones(false, rootEl);\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', '');\n      });\n      cloneNowShown();\n      clonesHidden = false;\n      cancel();\n    },\n    hideClone: function hideClone(_ref5) {\n      var _this = this;\n      var sortable = _ref5.sortable,\n        cloneNowHidden = _ref5.cloneNowHidden,\n        cancel = _ref5.cancel;\n      if (!this.isMultiDrag) return;\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', 'none');\n        if (_this.options.removeCloneOnHide && clone.parentNode) {\n          clone.parentNode.removeChild(clone);\n        }\n      });\n      cloneNowHidden();\n      clonesHidden = true;\n      cancel();\n    },\n    dragStartGlobal: function dragStartGlobal(_ref6) {\n      var sortable = _ref6.sortable;\n      if (!this.isMultiDrag && multiDragSortable) {\n        multiDragSortable.multiDrag._deselectMultiDrag();\n      }\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.sortableIndex = index(multiDragElement);\n      });\n\n      // Sort multi-drag elements\n      multiDragElements = multiDragElements.sort(function (a, b) {\n        return a.sortableIndex - b.sortableIndex;\n      });\n      dragStarted = true;\n    },\n    dragStarted: function dragStarted(_ref7) {\n      var _this2 = this;\n      var sortable = _ref7.sortable;\n      if (!this.isMultiDrag) return;\n      if (this.options.sort) {\n        // Capture rects,\n        // hide multi drag elements (by positioning them absolute),\n        // set multi drag elements rects to dragRect,\n        // show multi drag elements,\n        // animate to rects,\n        // unset rects & remove from DOM\n\n        sortable.captureAnimationState();\n        if (this.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            css(multiDragElement, 'position', 'absolute');\n          });\n          var dragRect = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRect);\n          });\n          folding = true;\n          initialFolding = true;\n        }\n      }\n      sortable.animateAll(function () {\n        folding = false;\n        initialFolding = false;\n        if (_this2.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n        }\n\n        // Remove all auxiliary multidrag items from el, if sorting enabled\n        if (_this2.options.sort) {\n          removeMultiDragElements();\n        }\n      });\n    },\n    dragOver: function dragOver(_ref8) {\n      var target = _ref8.target,\n        completed = _ref8.completed,\n        cancel = _ref8.cancel;\n      if (folding && ~multiDragElements.indexOf(target)) {\n        completed(false);\n        cancel();\n      }\n    },\n    revert: function revert(_ref9) {\n      var fromSortable = _ref9.fromSortable,\n        rootEl = _ref9.rootEl,\n        sortable = _ref9.sortable,\n        dragRect = _ref9.dragRect;\n      if (multiDragElements.length > 1) {\n        // Setup unfold animation\n        multiDragElements.forEach(function (multiDragElement) {\n          sortable.addAnimationState({\n            target: multiDragElement,\n            rect: folding ? getRect(multiDragElement) : dragRect\n          });\n          unsetRect(multiDragElement);\n          multiDragElement.fromRect = dragRect;\n          fromSortable.removeAnimationState(multiDragElement);\n        });\n        folding = false;\n        insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref10) {\n      var sortable = _ref10.sortable,\n        isOwner = _ref10.isOwner,\n        insertion = _ref10.insertion,\n        activeSortable = _ref10.activeSortable,\n        parentEl = _ref10.parentEl,\n        putSortable = _ref10.putSortable;\n      var options = this.options;\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        }\n        initialFolding = false;\n        // If leaving sort:false root, or already folding - Fold to new location\n        if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n          // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n          var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRectAbsolute);\n\n            // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n            // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n            parentEl.appendChild(multiDragElement);\n          });\n          folding = true;\n        }\n\n        // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n        if (!isOwner) {\n          // Only remove if not folding (folding will remove them anyways)\n          if (!folding) {\n            removeMultiDragElements();\n          }\n          if (multiDragElements.length > 1) {\n            var clonesHiddenBefore = clonesHidden;\n            activeSortable._showClone(sortable);\n\n            // Unfold animation for clones if showing from hidden\n            if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n              multiDragClones.forEach(function (clone) {\n                activeSortable.addAnimationState({\n                  target: clone,\n                  rect: clonesFromRect\n                });\n                clone.fromRect = clonesFromRect;\n                clone.thisAnimationDuration = null;\n              });\n            }\n          } else {\n            activeSortable._showClone(sortable);\n          }\n        }\n      }\n    },\n    dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n      var dragRect = _ref11.dragRect,\n        isOwner = _ref11.isOwner,\n        activeSortable = _ref11.activeSortable;\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.thisAnimationDuration = null;\n      });\n      if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n        clonesFromRect = _extends({}, dragRect);\n        var dragMatrix = matrix(dragEl$1, true);\n        clonesFromRect.top -= dragMatrix.f;\n        clonesFromRect.left -= dragMatrix.e;\n      }\n    },\n    dragOverAnimationComplete: function dragOverAnimationComplete() {\n      if (folding) {\n        folding = false;\n        removeMultiDragElements();\n      }\n    },\n    drop: function drop(_ref12) {\n      var evt = _ref12.originalEvent,\n        rootEl = _ref12.rootEl,\n        parentEl = _ref12.parentEl,\n        sortable = _ref12.sortable,\n        dispatchSortableEvent = _ref12.dispatchSortableEvent,\n        oldIndex = _ref12.oldIndex,\n        putSortable = _ref12.putSortable;\n      var toSortable = putSortable || this.sortable;\n      if (!evt) return;\n      var options = this.options,\n        children = parentEl.children;\n\n      // Multi-drag selection\n      if (!dragStarted) {\n        if (options.multiDragKey && !this.multiDragKeyDown) {\n          this._deselectMultiDrag();\n        }\n        toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n        if (!~multiDragElements.indexOf(dragEl$1)) {\n          multiDragElements.push(dragEl$1);\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'select',\n            targetEl: dragEl$1,\n            originalEvent: evt\n          });\n\n          // Modifier activated, select from last to dragEl\n          if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n            var lastIndex = index(lastMultiDragSelect),\n              currentIndex = index(dragEl$1);\n            if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n              (function () {\n                // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n                // (but previous selection existed)\n                var n, i;\n                if (currentIndex > lastIndex) {\n                  i = lastIndex;\n                  n = currentIndex;\n                } else {\n                  i = currentIndex;\n                  n = lastIndex + 1;\n                }\n                var filter = options.filter;\n                for (; i < n; i++) {\n                  if (~multiDragElements.indexOf(children[i])) continue;\n                  // Check if element is draggable\n                  if (!closest(children[i], options.draggable, parentEl, false)) continue;\n                  // Check if element is filtered\n                  var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n                    return closest(children[i], criteria.trim(), parentEl, false);\n                  }));\n                  if (filtered) continue;\n                  toggleClass(children[i], options.selectedClass, true);\n                  multiDragElements.push(children[i]);\n                  dispatchEvent({\n                    sortable: sortable,\n                    rootEl: rootEl,\n                    name: 'select',\n                    targetEl: children[i],\n                    originalEvent: evt\n                  });\n                }\n              })();\n            }\n          } else {\n            lastMultiDragSelect = dragEl$1;\n          }\n          multiDragSortable = toSortable;\n        } else {\n          multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n          lastMultiDragSelect = null;\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'deselect',\n            targetEl: dragEl$1,\n            originalEvent: evt\n          });\n        }\n      }\n\n      // Multi-drag drop\n      if (dragStarted && this.isMultiDrag) {\n        folding = false;\n        // Do not \"unfold\" after around dragEl if reverted\n        if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n          var dragRect = getRect(dragEl$1),\n            multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n          if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n          toSortable.captureAnimationState();\n          if (!initialFolding) {\n            if (options.animation) {\n              dragEl$1.fromRect = dragRect;\n              multiDragElements.forEach(function (multiDragElement) {\n                multiDragElement.thisAnimationDuration = null;\n                if (multiDragElement !== dragEl$1) {\n                  var rect = folding ? getRect(multiDragElement) : dragRect;\n                  multiDragElement.fromRect = rect;\n\n                  // Prepare unfold animation\n                  toSortable.addAnimationState({\n                    target: multiDragElement,\n                    rect: rect\n                  });\n                }\n              });\n            }\n\n            // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n            // properly they must all be removed\n            removeMultiDragElements();\n            multiDragElements.forEach(function (multiDragElement) {\n              if (children[multiDragIndex]) {\n                parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n              } else {\n                parentEl.appendChild(multiDragElement);\n              }\n              multiDragIndex++;\n            });\n\n            // If initial folding is done, the elements may have changed position because they are now\n            // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n            // must be fired here as Sortable will not.\n            if (oldIndex === index(dragEl$1)) {\n              var update = false;\n              multiDragElements.forEach(function (multiDragElement) {\n                if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n                  update = true;\n                  return;\n                }\n              });\n              if (update) {\n                dispatchSortableEvent('update');\n                dispatchSortableEvent('sort');\n              }\n            }\n          }\n\n          // Must be done after capturing individual rects (scroll bar)\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n          toSortable.animateAll();\n        }\n        multiDragSortable = toSortable;\n      }\n\n      // Remove clones if necessary\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        multiDragClones.forEach(function (clone) {\n          clone.parentNode && clone.parentNode.removeChild(clone);\n        });\n      }\n    },\n    nullingGlobal: function nullingGlobal() {\n      this.isMultiDrag = dragStarted = false;\n      multiDragClones.length = 0;\n    },\n    destroyGlobal: function destroyGlobal() {\n      this._deselectMultiDrag();\n      off(document, 'pointerup', this._deselectMultiDrag);\n      off(document, 'mouseup', this._deselectMultiDrag);\n      off(document, 'touchend', this._deselectMultiDrag);\n      off(document, 'keydown', this._checkKeyDown);\n      off(document, 'keyup', this._checkKeyUp);\n    },\n    _deselectMultiDrag: function _deselectMultiDrag(evt) {\n      if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n      // Only deselect if selection is in this sortable\n      if (multiDragSortable !== this.sortable) return;\n\n      // Only deselect if target is not item in this sortable\n      if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n      // Only deselect if left click\n      if (evt && evt.button !== 0) return;\n      while (multiDragElements.length) {\n        var el = multiDragElements[0];\n        toggleClass(el, this.options.selectedClass, false);\n        multiDragElements.shift();\n        dispatchEvent({\n          sortable: this.sortable,\n          rootEl: this.sortable.el,\n          name: 'deselect',\n          targetEl: el,\n          originalEvent: evt\n        });\n      }\n    },\n    _checkKeyDown: function _checkKeyDown(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = true;\n      }\n    },\n    _checkKeyUp: function _checkKeyUp(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = false;\n      }\n    }\n  };\n  return _extends(MultiDrag, {\n    // Static methods & properties\n    pluginName: 'multiDrag',\n    utils: {\n      /**\r\n       * Selects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be selected\r\n       */\n      select: function select(el) {\n        var sortable = el.parentNode[expando];\n        if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n        if (multiDragSortable && multiDragSortable !== sortable) {\n          multiDragSortable.multiDrag._deselectMultiDrag();\n          multiDragSortable = sortable;\n        }\n        toggleClass(el, sortable.options.selectedClass, true);\n        multiDragElements.push(el);\n      },\n      /**\r\n       * Deselects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be deselected\r\n       */\n      deselect: function deselect(el) {\n        var sortable = el.parentNode[expando],\n          index = multiDragElements.indexOf(el);\n        if (!sortable || !sortable.options.multiDrag || !~index) return;\n        toggleClass(el, sortable.options.selectedClass, false);\n        multiDragElements.splice(index, 1);\n      }\n    },\n    eventProperties: function eventProperties() {\n      var _this3 = this;\n      var oldIndicies = [],\n        newIndicies = [];\n      multiDragElements.forEach(function (multiDragElement) {\n        oldIndicies.push({\n          multiDragElement: multiDragElement,\n          index: multiDragElement.sortableIndex\n        });\n\n        // multiDragElements will already be sorted if folding\n        var newIndex;\n        if (folding && multiDragElement !== dragEl$1) {\n          newIndex = -1;\n        } else if (folding) {\n          newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n        } else {\n          newIndex = index(multiDragElement);\n        }\n        newIndicies.push({\n          multiDragElement: multiDragElement,\n          index: newIndex\n        });\n      });\n      return {\n        items: _toConsumableArray(multiDragElements),\n        clones: [].concat(multiDragClones),\n        oldIndicies: oldIndicies,\n        newIndicies: newIndicies\n      };\n    },\n    optionListeners: {\n      multiDragKey: function multiDragKey(key) {\n        key = key.toLowerCase();\n        if (key === 'ctrl') {\n          key = 'Control';\n        } else if (key.length > 1) {\n          key = key.charAt(0).toUpperCase() + key.substr(1);\n        }\n        return key;\n      }\n    }\n  });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n  multiDragElements.forEach(function (multiDragElement, i) {\n    var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n    if (target) {\n      rootEl.insertBefore(multiDragElement, target);\n    } else {\n      rootEl.appendChild(multiDragElement);\n    }\n  });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted\r\n * @param  {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n  multiDragClones.forEach(function (clone, i) {\n    var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n    if (target) {\n      rootEl.insertBefore(clone, target);\n    } else {\n      rootEl.appendChild(clone);\n    }\n  });\n}\nfunction removeMultiDragElements() {\n  multiDragElements.forEach(function (multiDragElement) {\n    if (multiDragElement === dragEl$1) return;\n    multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n  });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n", "import {Controller} from '@hotwired/stimulus';\nimport Sortable from 'sortablejs';\nconst uuid = require(\"uuid\");\n\nexport class SortableController extends Controller {\n\n    static values = {\n        options: Object\n    }\n\n    defaultOptions = {\n        animation: 100,\n        onAdd: this.handleOnAdd.bind(this)\n    }\n\n    connect() {\n        this.options = { ...this.defaultOptions };\n        this.options = this.hasOptionsValue ? this.options = { ...this.options, ...this.optionsValue } : {};\n        this.sortable = Sortable.create(this.element, this.options);\n    }\n\n    disconnect() {\n        this.sortable.destroy()\n        this.sortable = undefined;\n    }\n\n    handleOnAdd(event) {\n        if (this.options.replaceWithUuid) {\n            this.replaceWithUuid(event.item);\n        }\n        if (this.options.setInputValueOnAdd) {\n            this.setInputValueOnAdd(event.item)\n        }\n    }\n\n    replaceWithUuid(el) {\n        const id = uuid.v4();\n        el.innerHTML = el.innerHTML.replaceAll(this.options.replaceWithUuid, id);\n    }\n\n    setInputValueOnAdd(el) {\n        for (const [selector, value] of Object.entries(this.options.setInputValueOnAdd)) {\n            el.querySelectorAll(selector).forEach(foundElement => foundElement.value = value);\n        }\n    }\n    \n}\n", "import {Controller} from '@hotwired/stimulus';\n\nconst UPDATE_URL = '/invoice_items/new.json'\n\nexport class InvoiceItemFormController extends Controller {\n\n    static targets = ['productInput', 'invoicedObjectInput', 'itemNameInput', 'descriptionInput', 'quantityUnitInput', 'unitPriceInput', 'revenueAccountInput']\n\n    connect() {\n        this.productInputTarget.addEventListener('change', () => this.updateInputs());\n        this.invoicedObjectInputTarget.addEventListener('change', () => this.updateInputs());\n    }\n\n    async updateInputs() {\n        const productId = this.productInputTarget.value;\n        if (!productId) {\n            return;\n        }\n        if ([this.itemNameInputTarget, this.descriptionInputTarget, this.quantityUnitInputTarget, this.unitPriceInputTarget, this.revenueAccountInputTarget].map(input => input.value).some(val => !!val)) {\n            const confirmResult = await new Promise(resolve => {\n                bootbox.confirm({\n                    title: 'Positionsangaben neu berechnen?',\n                    message: 'Sollen die Texte, Einzelpreis, Ma\u00DFeinheit und Erl\u00F6skonto anhand der Kombination aus Dienstleistung und Produkt neu berechnet werden?',\n                    callback: resolve\n                })\n            })\n            if (!confirmResult) {\n                return;\n            }\n        }\n        const invoicedObjectComposedId = this.invoicedObjectInputTarget.value;\n        let params = `?invoice_item[product_id]=${productId}`;\n        if (invoicedObjectComposedId) {\n            params += `&invoice_item[invoiced_object_composed_id]=${invoicedObjectComposedId}`\n        }\n        const fetchResult = await fetch(UPDATE_URL + params)\n        const jsonResult = await fetchResult.json()\n        this.itemNameInputTarget.value = jsonResult.item_name || '';\n        this.descriptionInputTarget.value = jsonResult.description || '';\n        this.quantityUnitInputTarget.value = jsonResult.quantity_unit || '';\n        this.unitPriceInputTarget.value = jsonResult.unit_price ? parseFloat(jsonResult.unit_price).toLocaleString(document.documentElement.lang) : '';\n        this.revenueAccountInputTarget.value = jsonResult.revenue_account_id\n    }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nconst _RailsNestedForm = class _RailsNestedForm extends Controller {\n  add(e) {\n    e.preventDefault();\n    const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, (/* @__PURE__ */ new Date()).getTime().toString());\n    this.targetTarget.insertAdjacentHTML(\"beforebegin\", content);\n    const event = new CustomEvent(\"rails-nested-form:add\", { bubbles: !0 });\n    this.element.dispatchEvent(event);\n  }\n  remove(e) {\n    e.preventDefault();\n    const wrapper = e.target.closest(this.wrapperSelectorValue);\n    if (wrapper.dataset.newRecord === \"true\")\n      wrapper.remove();\n    else {\n      wrapper.style.display = \"none\";\n      const input = wrapper.querySelector(\"input[name*='_destroy']\");\n      input.value = \"1\";\n    }\n    const event = new CustomEvent(\"rails-nested-form:remove\", { bubbles: !0 });\n    this.element.dispatchEvent(event);\n  }\n};\n_RailsNestedForm.targets = [\"target\", \"template\"], _RailsNestedForm.values = {\n  wrapperSelector: {\n    type: String,\n    default: \".nested-form-wrapper\"\n  }\n};\nlet RailsNestedForm = _RailsNestedForm;\nexport {\n  RailsNestedForm as default\n};\n", "import NestedForm from \"@stimulus-components/rails-nested-form\";\n\nconst dontAskAgainFor = [];\n\nexport class NestedFormController extends NestedForm {\n\n    static values = {\n        wrapperSelector: {\n            type: String,\n            default: '.nested-form-wrapper'\n        },\n        typeKey: {\n            type: String,\n            default: ''\n        }\n    }\n\n    async remove(e) {\n        e.preventDefault();\n        const deletionConfirmed = await this.askForConfirmation()\n        if (!deletionConfirmed) {\n            return;\n        }\n        const wrapper = e.target.closest(this.wrapperSelectorValue);\n        if (this.inUse(wrapper)) {\n            bootbox.alert({\n                title: \"In Verwendung\",\n                message: \"Dieses Objekt kann nicht entfernt werden, da es in der Datenbank referenziert wird. Wenn es zuk\u00FCnftig nicht mehr verwendet werden soll, setzen Sie ein G\u00FCltigkeitsende.\"\n            });\n            return;\n        }\n        wrapper.classList.add('visually-hidden');\n        wrapper.addEventListener('transitionend', () => {\n            if (wrapper.dataset.newRecord === \"true\") {\n                wrapper.remove();\n            } else {\n                wrapper.style.display = \"none\";\n            }\n        }, {\n            capture: false,\n            once: true,\n            passive: false\n        });\n        const input = wrapper.querySelector(\"input[name*='_destroy']\");\n        input.value = \"1\";\n    }\n\n    async askForConfirmation() {\n        const typeKey = this.typeKeyValue\n        if (typeKey && dontAskAgainFor.includes(typeKey)) {\n            return true;\n        } else {\n            return await new Promise(resolve => {\n                const dontAskAgainButton = typeKey ? {\n                    dontAskAgain: {\n                        label: 'Ja, nicht mehr Fragen',\n                        callback: function () {\n                            dontAskAgainFor.push(typeKey);\n                            resolve(true)\n                        },\n                    },\n                } : {}\n                bootbox.dialog({\n                    title: name + ' wirklich entfernen?',\n                    message: 'Soll der Eintrag beim Speichern wirklich gel\u00F6scht werden?',\n                    buttons: {\n                        cancel: {\n                            label: 'Abbrechen',\n                            className: 'pull-left',\n                            callback: () => resolve(false)\n                        },\n                        ...dontAskAgainButton,\n                        ok: {\n                            label: 'Ok',\n                            className: 'btn-primary',\n                            callback: () => resolve(true)\n                        }\n                    }\n                });\n            })\n        }\n    }\n\n    inUse(wrapper) {\n        return wrapper.dataset.inUse === \"true\";\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nconst _Reveal = class _Reveal extends Controller {\n  connect() {\n    this.class = this.hasHiddenClass ? this.hiddenClass : \"hidden\";\n  }\n  toggle() {\n    this.itemTargets.forEach((item) => {\n      item.classList.toggle(this.class);\n    });\n  }\n  show() {\n    this.itemTargets.forEach((item) => {\n      item.classList.remove(this.class);\n    });\n  }\n  hide() {\n    this.itemTargets.forEach((item) => {\n      item.classList.add(this.class);\n    });\n  }\n};\n_Reveal.targets = [\"item\"], _Reveal.classes = [\"hidden\"];\nlet Reveal = _Reveal;\nexport {\n  Reveal as default\n};\n", "import {Controller} from \"@hotwired/stimulus\";\n\nexport class DisableController extends Controller {\n\n    static targets = [\n        'submit',\n        'input',\n        'trigger',\n        'hint'\n    ]\n\n    connect() {\n        this.inputTargets.forEach(input => {\n            input.addEventListener('change', () => {\n                this.recalculateDisabledState();\n            })\n        })\n        this.triggerTargets.forEach(trigger => {\n            trigger.addEventListener('change', () => {\n                this.recalculateDisabledState();\n            })\n        })\n        this.recalculateDisabledState();\n    }\n\n    recalculateDisabledState() {\n        const disabled = this.inputTargets.every(input => !input.value || input.value === '0')\n        this.submitTargets.forEach(target => target.disabled = disabled)\n        this.hintTargets.forEach(target => target.hidden = !disabled)\n    }\n\n}\n", "import jquery from \"jquery\";\nwindow.jQuery = jquery;\nwindow.$ = jquery;\nexport { jquery as $ }\nexport { jquery as jQuery }\n", "/*! jQuery UI - v1.13.3 - 2024-07-12\n* https://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/draggable.js, widgets/sortable.js, widgets/mouse.js, effect.js, effects/effect-fade.js, effects/effect-puff.js, effects/effect-scale.js, effects/effect-size.js\n* Copyright OpenJS Foundation and other contributors; Licensed MIT */\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.13.3\";\n\n\n/*!\n * jQuery UI Widget 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: https://api.jqueryui.com/jQuery.widget/\n//>>demos: https://jqueryui.com/widget/\n\n\nvar widgetUuid = 0;\nvar widgetHasOwnProperty = Array.prototype.hasOwnProperty;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\n\t\t\t// Only trigger remove when necessary to save time\n\t\t\tevents = $._data( elem, \"events\" );\n\t\t\tif ( events && events.remove ) {\n\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( Array.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this || !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction bindRemoveEvent() {\n\t\t\tvar nodesToBind = [];\n\n\t\t\toptions.element.each( function( _, element ) {\n\t\t\t\tvar isTracked = $.map( that.classesElementLookup, function( elements ) {\n\t\t\t\t\treturn elements;\n\t\t\t\t} )\n\t\t\t\t\t.some( function( elements ) {\n\t\t\t\t\t\treturn elements.is( element );\n\t\t\t\t\t} );\n\n\t\t\t\tif ( !isTracked ) {\n\t\t\t\t\tnodesToBind.push( element );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthat._on( $( nodesToBind ), {\n\t\t\t\tremove: \"_untrackClassesElement\"\n\t\t\t} );\n\t\t}\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tbindRemoveEvent();\n\t\t\t\t\tcurrent = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\n\t\tthis._off( $( event.target ) );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( typeof callback === \"function\" &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t} else if ( options === true ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * https://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: https://api.jqueryui.com/position/\n//>>demos: https://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div style=\" +\n\t\t\t\t\"'display:block;position:absolute;width:200px;height:200px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:300px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisElemWindow = isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isElemWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isElemWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\n\t\t// Make sure string options are treated as CSS selectors\n\t\ttarget = typeof options.of === \"string\" ?\n\t\t\t$( document ).find( options.of ) :\n\t\t\t$( options.of ),\n\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI :data 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: https://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr.pseudos, {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n\n/*!\n * jQuery UI Disable Selection 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: disableSelection\n//>>group: Core\n//>>description: Disable selection of text content within the set of matched elements.\n//>>docs: https://api.jqueryui.com/disableSelection/\n\n// This file is deprecated\n\nvar disableSelection = $.fn.extend( {\n\tdisableSelection: ( function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.on( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tenableSelection: function() {\n\t\treturn this.off( \".ui-disableSelection\" );\n\t}\n} );\n\n\n/*!\n * jQuery UI Focusable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :focusable Selector\n//>>group: Core\n//>>description: Selects elements which can be focused.\n//>>docs: https://api.jqueryui.com/focusable-selector/\n\n\n// Selectors\n$.ui.focusable = function( element, hasTabindex ) {\n\tvar map, mapName, img, focusableIfVisible, fieldset,\n\t\tnodeName = element.nodeName.toLowerCase();\n\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" );\n\t\treturn img.length > 0 && img.is( \":visible\" );\n\t}\n\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\n\t\tfocusableIfVisible = !element.disabled;\n\n\t\tif ( focusableIfVisible ) {\n\n\t\t\t// Form controls within a disabled fieldset are disabled.\n\t\t\t// However, controls within the fieldset's legend do not get disabled.\n\t\t\t// Since controls generally aren't placed inside legends, we skip\n\t\t\t// this portion of the check.\n\t\t\tfieldset = $( element ).closest( \"fieldset\" )[ 0 ];\n\t\t\tif ( fieldset ) {\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\n\t\t\t}\n\t\t}\n\t} else if ( \"a\" === nodeName ) {\n\t\tfocusableIfVisible = element.href || hasTabindex;\n\t} else {\n\t\tfocusableIfVisible = hasTabindex;\n\t}\n\n\treturn focusableIfVisible && $( element ).is( \":visible\" ) && visible( $( element ) );\n};\n\n// Support: IE 8 only\n// IE 8 doesn't resolve inherit to visible/hidden for computed values\nfunction visible( element ) {\n\tvar visibility = element.css( \"visibility\" );\n\twhile ( visibility === \"inherit\" ) {\n\t\telement = element.parent();\n\t\tvisibility = element.css( \"visibility\" );\n\t}\n\treturn visibility === \"visible\";\n}\n\n$.extend( $.expr.pseudos, {\n\tfocusable: function( element ) {\n\t\treturn $.ui.focusable( element, $.attr( element, \"tabindex\" ) != null );\n\t}\n} );\n\nvar focusable = $.ui.focusable;\n\n\n\n// Support: IE8 Only\n// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop\n// with a string, so we need to find the proper form.\nvar form = $.fn._form = function() {\n\treturn typeof this[ 0 ].form === \"string\" ? this.closest( \"form\" ) : $( this[ 0 ].form );\n};\n\n\n/*!\n * jQuery UI Form Reset Mixin 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Form Reset Mixin\n//>>group: Core\n//>>description: Refresh input widgets when their form is reset\n//>>docs: https://api.jqueryui.com/form-reset-mixin/\n\n\nvar formResetMixin = $.ui.formResetMixin = {\n\t_formResetHandler: function() {\n\t\tvar form = $( this );\n\n\t\t// Wait for the form reset to actually happen before refreshing\n\t\tsetTimeout( function() {\n\t\t\tvar instances = form.data( \"ui-form-reset-instances\" );\n\t\t\t$.each( instances, function() {\n\t\t\t\tthis.refresh();\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_bindFormResetHandler: function() {\n\t\tthis.form = this.element._form();\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" ) || [];\n\t\tif ( !instances.length ) {\n\n\t\t\t// We don't use _on() here because we use a single event handler per form\n\t\t\tthis.form.on( \"reset.ui-form-reset\", this._formResetHandler );\n\t\t}\n\t\tinstances.push( this );\n\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t},\n\n\t_unbindFormResetHandler: function() {\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" );\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\n\t\tif ( instances.length ) {\n\t\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t\t} else {\n\t\t\tthis.form\n\t\t\t\t.removeData( \"ui-form-reset-instances\" )\n\t\t\t\t.off( \"reset.ui-form-reset\" );\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Support for jQuery core 1.8.x and newer 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n */\n\n//>>label: jQuery 1.8+ Support\n//>>group: Core\n//>>description: Support version 1.8.x and newer of jQuery core\n\n\n// Support: jQuery 1.9.x or older\n// $.expr[ \":\" ] is deprecated.\nif ( !$.expr.pseudos ) {\n\t$.expr.pseudos = $.expr[ \":\" ];\n}\n\n// Support: jQuery 1.11.x or older\n// $.unique has been renamed to $.uniqueSort\nif ( !$.uniqueSort ) {\n\t$.uniqueSort = $.unique;\n}\n\n// Support: jQuery 2.2.x or older.\n// This method has been defined in jQuery 3.0.0.\n// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js\nif ( !$.escapeSelector ) {\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tvar fcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t};\n\n\t$.escapeSelector = function( sel ) {\n\t\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n\t};\n}\n\n// Support: jQuery 3.4.x or older\n// These methods have been defined in jQuery 3.5.0.\nif ( !$.fn.even || !$.fn.odd ) {\n\t$.fn.extend( {\n\t\teven: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 0;\n\t\t\t} );\n\t\t},\n\t\todd: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 1;\n\t\t\t} );\n\t\t}\n\t} );\n}\n\n;\n/*!\n * jQuery UI Keycode 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: https://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n/*!\n * jQuery UI Labels 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: labels\n//>>group: Core\n//>>description: Find all the labels associated with a given input\n//>>docs: https://api.jqueryui.com/labels/\n\n\nvar labels = $.fn.labels = function() {\n\tvar ancestor, selector, id, labels, ancestors;\n\n\tif ( !this.length ) {\n\t\treturn this.pushStack( [] );\n\t}\n\n\t// Check control.labels first\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\n\t\treturn this.pushStack( this[ 0 ].labels );\n\t}\n\n\t// Support: IE <= 11, FF <= 37, Android <= 2.3 only\n\t// Above browsers do not support control.labels. Everything below is to support them\n\t// as well as document fragments. control.labels does not work on document fragments\n\tlabels = this.eq( 0 ).parents( \"label\" );\n\n\t// Look for the label based on the id\n\tid = this.attr( \"id\" );\n\tif ( id ) {\n\n\t\t// We don't search against the document in case the element\n\t\t// is disconnected from the DOM\n\t\tancestor = this.eq( 0 ).parents().last();\n\n\t\t// Get a full set of top level ancestors\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\n\n\t\t// Create a selector for the label based on the id\n\t\tselector = \"label[for='\" + $.escapeSelector( id ) + \"']\";\n\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\n\n\t}\n\n\t// Return whatever we have found for labels\n\treturn this.pushStack( labels );\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: https://api.jqueryui.com/scrollParent/\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Tabbable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :tabbable Selector\n//>>group: Core\n//>>description: Selects elements which can be tabbed to.\n//>>docs: https://api.jqueryui.com/tabbable-selector/\n\n\nvar tabbable = $.extend( $.expr.pseudos, {\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\thasTabindex = tabIndex != null;\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\n\t}\n} );\n\n\n/*!\n * jQuery UI Unique ID 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: https://api.jqueryui.com/uniqueId/\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n\n// This file is deprecated\nvar ie = $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n/*!\n * jQuery UI Mouse 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: https://api.jqueryui.com/mouse/\n\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( \"ui.mouse\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseUp( event );\n\t\t}\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\tif ( this._mouseStarted ) {\n\t\t\t\tthis._mouseDrag( event );\n\t\t\t} else {\n\t\t\t\tthis._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) {\n\t\treturn true;\n\t}\n} );\n\n\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nvar plugin = $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n\n\nvar safeBlur = $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== \"body\" ) {\n\t\t$( element ).trigger( \"blur\" );\n\t}\n};\n\n\n/*!\n * jQuery UI Draggable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: https://api.jqueryui.com/draggable/\n//>>demos: https://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( typeof this.options.revert === \"function\" &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = typeof o.helper === \"function\",\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// https://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\tif ( inst.options.snap.release ) {\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\tif ( inst.options.snap.snap ) {\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Sortable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: https://api.jqueryui.com/sortable/\n//>>demos: https://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\nvar widgetsSortable = $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Prepare the dragged items parent\n\t\tthis.appendTo = $( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem.parent() );\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// After we get the helper offset, but before we get the parent offset we can\n\t\t// change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t$.extend( this.offset, {\n\t\t\tparent: this._getParentOffset()\n\t\t} );\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\t// We need to make sure to grab the zIndex before setting the\n\t\t// opacity, because setting the opacity to anything lower than 1\n\t\t// causes the zIndex to change from \"auto\" to 0.\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t//Move the helper, if needed\n\t\tif ( !this.helper.parent().is( this.appendTo ) ) {\n\t\t\tthis.helper.detach().appendTo( this.appendTo );\n\n\t\t\t//Update position\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Generate the original position\n\t\tthis.position = this.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\t\tthis.lastPositionAbs = this.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tthis._mouseDrag( event );\n\n\t\treturn true;\n\n\t},\n\n\t_scroll: function( event ) {\n\t\tvar o = this.options,\n\t\t\tscrolled = false;\n\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t}\n\n\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t}\n\n\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t);\n\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t);\n\t\t\t}\n\n\t\t}\n\n\t\treturn scrolled;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( o.scroll ) {\n\t\t\tif ( this._scroll( event ) !== false ) {\n\n\t\t\t\t//Update item positions used in position checks\n\t\t\t\tthis._refreshItemPositions( true );\n\n\t\t\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.dragDirection = {\n\t\t\tvertical: this._getDragVerticalDirection(),\n\t\t\thorizontal: this._getDragHorizontalDirection()\n\t\t};\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ?\n\t\t\t\t\"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\t\t\t\tthis._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this.dragDirection.vertical;\n\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 ) :\n\t\t\t( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this.dragDirection.vertical,\n\t\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ typeof this.options.items === \"function\" ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ typeof this.options.items === \"function\" ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t_refreshItemPositions: function( fast ) {\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( this.currentContainer && item.instance !== this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t// This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tthis._refreshItemPositions( fast );\n\n\t\tvar i, p;\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className, nodeName,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\tnodeName = that.currentItem[ 0 ].nodeName.toLowerCase();\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar element = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element doesn't have a actual height or width by itself (without\n\t\t\t\t\t// styles coming from a stylesheet), it receives the inline height and width\n\t\t\t\t\t// from the dragged item. Or, if it's a tbody or tr, it's going to have a height\n\t\t\t\t\t// anyway since we're populating them with <td>s above, but they're unlikely to\n\t\t\t\t\t// be the correct height on their own if the row heights are dynamic, so we'll\n\t\t\t\t\t// always assign the height of the dragged item given forcePlaceholderSize\n\t\t\t\t\t// is true.\n\t\t\t\t\tif ( !p.height() || ( o.forcePlaceholderSize &&\n\t\t\t\t\t\t\t( nodeName === \"tbody\" || nodeName === \"tr\" ) ) ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( itemWithLeastDistance ) {\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true );\n\t\t\t} else {\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\t}\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\t//Update scrollParent\n\t\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t\t//Update overflowOffset\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t\t}\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = typeof o.helper === \"function\" ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\tthis.appendTo[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\tif ( a ) {\n\t\t\ta[ 0 ].appendChild( this.placeholder[ 0 ] );\n\t\t} else {\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\t\t}\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n\n// Create a local jQuery because jQuery Color relies on it and the\n// global may not exist with AMD and a custom build (#10199).\n// This module is a noop if used as a regular AMD module.\n// eslint-disable-next-line no-unused-vars\nvar jQuery = $;\n\n\n/*!\n * jQuery Color Animations v2.2.0\n * https://github.com/jquery/jquery-color\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * Date: Sun May 10 09:02:36 2020 +0200\n */\n\n\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\tclass2type = {},\n\ttoString = class2type.toString,\n\n\t// plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// a set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ], 16 ) / 255 ).toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ] + execResult[ 4 ], 16 ) / 255 )\n\t\t\t\t\t\t\t.toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// jQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// element for support tests\n\tsupportElem = jQuery( \"<p>\" )[ 0 ],\n\n\t// colors = jQuery.Color.names\n\tcolors,\n\n\t// local aliases of functions called often\n\teach = jQuery.each;\n\n// determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n} );\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction getType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\n\t\t// we add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// for now all property types without mod have min and max\n\treturn Math.min( type.max, Math.max( 0, value ) );\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( _i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// if this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// if this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = getType( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// more than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( _key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// if the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// if the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// this is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\n\t\t\t\t\t\t// use the default of 1\n\t\t\t\t\t\tif ( inst[ cache ][ 3 ] == null ) {\n\t\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( _key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// if null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// if we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\tif ( v != null ) {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\treturn i > 2 ? 1 : 0;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t} ).join( \"\" );\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = getType( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar local, cur, match, fn,\n\t\t\t\tvtype = getType( value );\n\n\t\t\tif ( key === \"alpha\" ) {\n\t\t\t\tfn = this._hsla ? \"hsla\" : \"rgba\";\n\t\t\t} else {\n\t\t\t\tfn = spaceName;\n\t\t\t}\n\t\t\tlocal = this[ fn ]();\n\t\t\tcur = local[ prop.idx ];\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = getType( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( _i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( getType( value ) !== \"string\" || ( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t( backgroundColor === \"\" || backgroundColor === \"transparent\" ) &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// wrapped to prevent IE from throwing errors on \"invalid\" values like 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( _i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n\n/*!\n * jQuery UI Effects 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Effects Core\n//>>group: Effects\n/* eslint-disable max-len */\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/category/effects-core/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar dataSpace = \"ui-effects-\",\n\tdataSpaceStyle = \"ui-effects-style\",\n\tdataSpaceAnimated = \"ui-effects-animated\";\n\n$.effects = {\n\teffect: {}\n};\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n( function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each(\n\t[ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ],\n\tfunction( _, prop ) {\n\t\t$.fx.step[ prop ] = function( fx ) {\n\t\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\t\tfx.setAttr = true;\n\t\t\t}\n\t\t};\n\t}\n);\n\nfunction camelCase( string ) {\n\treturn string.replace( /-([\\da-z])/gi, function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t} );\n}\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\n\t// Support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// Support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// Map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t} );\n\n\t\t// Apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function( i, action ) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// Map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t} );\n\n\t\t// Apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// Map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend( {}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t} );\n\n\t\t// Once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\n\n\t\t\t// Set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// For each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function( key ) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t} );\n\t} );\n};\n\n$.fn.extend( {\n\taddClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.addClass ),\n\n\tremoveClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.removeClass ),\n\n\ttoggleClass: ( function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\n\t\t\t\t\t// Without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback ) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n} );\n\n} )();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n( function() {\n\nif ( $.expr && $.expr.pseudos && $.expr.pseudos.animated ) {\n\t$.expr.pseudos.animated = ( function( orig ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\n\t\t};\n\t} )( $.expr.pseudos.animated );\n}\n\nif ( $.uiBackCompat !== false ) {\n\t$.extend( $.effects, {\n\n\t\t// Saves a set of properties in a data storage\n\t\tsave: function( element, set ) {\n\t\t\tvar i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Restores a set of previously saved properties from a data storage\n\t\trestore: function( element, set ) {\n\t\t\tvar val, i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t\telement.css( set[ i ], val );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetMode: function( el, mode ) {\n\t\t\tif ( mode === \"toggle\" ) {\n\t\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t\t}\n\t\t\treturn mode;\n\t\t},\n\n\t\t// Wraps the element around a wrapper that copies position properties\n\t\tcreateWrapper: function( element ) {\n\n\t\t\t// If the element is already wrapped, return it\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\treturn element.parent();\n\t\t\t}\n\n\t\t\t// Wrap the element\n\t\t\tvar props = {\n\t\t\t\t\twidth: element.outerWidth( true ),\n\t\t\t\t\theight: element.outerHeight( true ),\n\t\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t\t},\n\t\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0\n\t\t\t\t\t} ),\n\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\t\tsize = {\n\t\t\t\t\twidth: element.width(),\n\t\t\t\t\theight: element.height()\n\t\t\t\t},\n\t\t\t\tactive = document.activeElement;\n\n\t\t\t// Support: Firefox\n\t\t\t// Firefox incorrectly exposes anonymous content\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\t\ttry {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tactive.id;\n\t\t\t} catch ( e ) {\n\t\t\t\tactive = document.body;\n\t\t\t}\n\n\t\t\telement.wrap( wrapper );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\n\t\t\t// lose the reference to the wrapped element\n\t\t\twrapper = element.parent();\n\n\t\t\t// Transfer positioning properties to the wrapper\n\t\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\t\twrapper.css( { position: \"relative\" } );\n\t\t\t\telement.css( { position: \"relative\" } );\n\t\t\t} else {\n\t\t\t\t$.extend( props, {\n\t\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t\t} );\n\t\t\t\t$.each( [ \"top\", \"left\", \"bottom\", \"right\" ], function( i, pos ) {\n\t\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\telement.css( {\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: \"auto\",\n\t\t\t\t\tbottom: \"auto\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telement.css( size );\n\n\t\t\treturn wrapper.css( props ).show();\n\t\t},\n\n\t\tremoveWrapper: function( element ) {\n\t\t\tvar active = document.activeElement;\n\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\telement.parent().replaceWith( element );\n\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn element;\n\t\t}\n\t} );\n}\n\n$.extend( $.effects, {\n\tversion: \"1.13.3\",\n\n\tdefine: function( name, mode, effect ) {\n\t\tif ( !effect ) {\n\t\t\teffect = mode;\n\t\t\tmode = \"effect\";\n\t\t}\n\n\t\t$.effects.effect[ name ] = effect;\n\t\t$.effects.effect[ name ].mode = mode;\n\n\t\treturn effect;\n\t},\n\n\tscaledDimensions: function( element, percent, direction ) {\n\t\tif ( percent === 0 ) {\n\t\t\treturn {\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t\touterHeight: 0,\n\t\t\t\touterWidth: 0\n\t\t\t};\n\t\t}\n\n\t\tvar x = direction !== \"horizontal\" ? ( ( percent || 100 ) / 100 ) : 1,\n\t\t\ty = direction !== \"vertical\" ? ( ( percent || 100 ) / 100 ) : 1;\n\n\t\treturn {\n\t\t\theight: element.height() * y,\n\t\t\twidth: element.width() * x,\n\t\t\touterHeight: element.outerHeight() * y,\n\t\t\touterWidth: element.outerWidth() * x\n\t\t};\n\n\t},\n\n\tclipToBox: function( animation ) {\n\t\treturn {\n\t\t\twidth: animation.clip.right - animation.clip.left,\n\t\t\theight: animation.clip.bottom - animation.clip.top,\n\t\t\tleft: animation.clip.left,\n\t\t\ttop: animation.clip.top\n\t\t};\n\t},\n\n\t// Injects recently queued functions to be first in line (after \"inprogress\")\n\tunshift: function( element, queueLength, count ) {\n\t\tvar queue = element.queue();\n\n\t\tif ( queueLength > 1 ) {\n\t\t\tqueue.splice.apply( queue,\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\n\t\t}\n\t\telement.dequeue();\n\t},\n\n\tsaveStyle: function( element ) {\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\n\t},\n\n\trestoreStyle: function( element ) {\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || \"\";\n\t\telement.removeData( dataSpaceStyle );\n\t},\n\n\tmode: function( element, mode ) {\n\t\tvar hidden = element.is( \":hidden\" );\n\n\t\tif ( mode === \"toggle\" ) {\n\t\t\tmode = hidden ? \"show\" : \"hide\";\n\t\t}\n\t\tif ( hidden ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\tmode = \"none\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\n\t\tswitch ( origin[ 0 ] ) {\n\t\tcase \"top\":\n\t\t\ty = 0;\n\t\t\tbreak;\n\t\tcase \"middle\":\n\t\t\ty = 0.5;\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\t\ty = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ty = origin[ 0 ] / original.height;\n\t\t}\n\n\t\tswitch ( origin[ 1 ] ) {\n\t\tcase \"left\":\n\t\t\tx = 0;\n\t\t\tbreak;\n\t\tcase \"center\":\n\t\t\tx = 0.5;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tx = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tx = origin[ 1 ] / original.width;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Creates a placeholder element so that the original element can be made absolute\n\tcreatePlaceholder: function( element ) {\n\t\tvar placeholder,\n\t\t\tcssPosition = element.css( \"position\" ),\n\t\t\tposition = element.position();\n\n\t\t// Lock in margins first to account for form elements, which\n\t\t// will change margin if you explicitly set height\n\t\t// see: https://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\n\t\t// Support: Safari\n\t\telement.css( {\n\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\tmarginRight: element.css( \"marginRight\" )\n\t\t} )\n\t\t.outerWidth( element.outerWidth() )\n\t\t.outerHeight( element.outerHeight() );\n\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\n\t\t\tcssPosition = \"absolute\";\n\n\t\t\tplaceholder = $( \"<\" + element[ 0 ].nodeName + \">\" ).insertAfter( element ).css( {\n\n\t\t\t\t// Convert inline to inline block to account for inline elements\n\t\t\t\t// that turn to inline block based on content (like img)\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( \"display\" ) ) ?\n\t\t\t\t\t\"inline-block\" :\n\t\t\t\t\t\"block\",\n\t\t\t\tvisibility: \"hidden\",\n\n\t\t\t\t// Margins need to be set to account for margin collapse\n\t\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\t\tmarginRight: element.css( \"marginRight\" ),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t} )\n\t\t\t.outerWidth( element.outerWidth() )\n\t\t\t.outerHeight( element.outerHeight() )\n\t\t\t.addClass( \"ui-effects-placeholder\" );\n\n\t\t\telement.data( dataSpace + \"placeholder\", placeholder );\n\t\t}\n\n\t\telement.css( {\n\t\t\tposition: cssPosition,\n\t\t\tleft: position.left,\n\t\t\ttop: position.top\n\t\t} );\n\n\t\treturn placeholder;\n\t},\n\n\tremovePlaceholder: function( element ) {\n\t\tvar dataKey = dataSpace + \"placeholder\",\n\t\t\t\tplaceholder = element.data( dataKey );\n\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.remove();\n\t\t\telement.removeData( dataKey );\n\t\t}\n\t},\n\n\t// Removes a placeholder if it exists and restores\n\t// properties that were modified during placeholder creation\n\tcleanUp: function( element ) {\n\t\t$.effects.restoreStyle( element );\n\t\t$.effects.removePlaceholder( element );\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t} );\n\t\treturn value;\n\t}\n} );\n\n// Return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// Allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// Convert to an object\n\teffect = { effect: effect };\n\n\t// Catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, callback)\n\tif ( typeof options === \"function\" ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, options, callback)\n\tif ( typeof speed === \"function\" ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// Add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( typeof option === \"function\" ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend( {\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\n\t\t\tdefaultMode = effectMethod.mode,\n\t\t\tqueue = args.queue,\n\t\t\tqueueName = queue || \"fx\",\n\t\t\tcomplete = args.complete,\n\t\t\tmode = args.mode,\n\t\t\tmodes = [],\n\t\t\tprefilter = function( next ) {\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\n\n\t\t\t\t// Sentinel for duck-punching the :animated pseudo-selector\n\t\t\t\tel.data( dataSpaceAnimated, true );\n\n\t\t\t\t// Save effect mode for later use,\n\t\t\t\t// we can't just call $.effects.mode again later,\n\t\t\t\t// as the .show() below destroys the initial state\n\t\t\t\tmodes.push( normalizedMode );\n\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.14\n\t\t\t\tif ( defaultMode && ( normalizedMode === \"show\" ||\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === \"hide\" ) ) ) {\n\t\t\t\t\tel.show();\n\t\t\t\t}\n\n\t\t\t\tif ( !defaultMode || normalizedMode !== \"none\" ) {\n\t\t\t\t\t$.effects.saveStyle( el );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof next === \"function\" ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( complete ) {\n\t\t\t\t\t\tcomplete.call( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this );\n\n\t\t\tfunction cleanup() {\n\t\t\t\telem.removeData( dataSpaceAnimated );\n\n\t\t\t\t$.effects.cleanUp( elem );\n\n\t\t\t\tif ( args.mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\n\t\t\t\tdone();\n\t\t\t}\n\n\t\t\tfunction done() {\n\t\t\t\tif ( typeof complete === \"function\" ) {\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof next === \"function\" ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mode option on a per element basis,\n\t\t\t// as toggle can be either show or hide depending on element state\n\t\t\targs.mode = modes.shift();\n\n\t\t\tif ( $.uiBackCompat !== false && !defaultMode ) {\n\t\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( args.mode === \"none\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Run prefilter on all elements first to ensure that\n\t\t// any showing or hiding happens before placeholder creation,\n\t\t// which ensures that any layout changes are correctly captured.\n\t\treturn queue === false ?\n\t\t\tthis.each( prefilter ).each( run ) :\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\n\t},\n\n\tshow: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.show ),\n\n\thide: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.hide ),\n\n\ttoggle: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggle ),\n\n\tcssUnit: function( key ) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t} );\n\t\treturn val;\n\t},\n\n\tcssClip: function( clipObj ) {\n\t\tif ( clipObj ) {\n\t\t\treturn this.css( \"clip\", \"rect(\" + clipObj.top + \"px \" + clipObj.right + \"px \" +\n\t\t\t\tclipObj.bottom + \"px \" + clipObj.left + \"px)\" );\n\t\t}\n\t\treturn parseClip( this.css( \"clip\" ), this );\n\t},\n\n\ttransfer: function( options, done ) {\n\t\tvar element = $( this ),\n\t\t\ttarget = $( options.to ),\n\t\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\t\tbody = $( \"body\" ),\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top - fixTop,\n\t\t\t\tleft: endPosition.left - fixLeft,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = element.offset(),\n\t\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" );\n\n\t\ttransfer\n\t\t\t.appendTo( \"body\" )\n\t\t\t.addClass( options.className )\n\t\t\t.css( {\n\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\theight: element.innerHeight(),\n\t\t\t\twidth: element.innerWidth(),\n\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t} )\n\t\t\t.animate( animation, options.duration, options.easing, function() {\n\t\t\t\ttransfer.remove();\n\t\t\t\tif ( typeof done === \"function\" ) {\n\t\t\t\t\tdone();\n\t\t\t\t}\n\t\t\t} );\n\t}\n} );\n\nfunction parseClip( str, element ) {\n\t\tvar outerWidth = element.outerWidth(),\n\t\t\touterHeight = element.outerHeight(),\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\n\t\t\tvalues = clipRegex.exec( str ) || [ \"\", 0, outerWidth, outerHeight, 0 ];\n\n\t\treturn {\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\n\t\t\tright: values[ 2 ] === \"auto\" ? outerWidth : parseFloat( values[ 2 ] ),\n\t\t\tbottom: values[ 3 ] === \"auto\" ? outerHeight : parseFloat( values[ 3 ] ),\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\n\t\t};\n}\n\n$.fx.step.clip = function( fx ) {\n\tif ( !fx.clipInit ) {\n\t\tfx.start = $( fx.elem ).cssClip();\n\t\tif ( typeof fx.end === \"string\" ) {\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\n\t\t}\n\t\tfx.clipInit = true;\n\t}\n\n\t$( fx.elem ).cssClip( {\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\n\t} );\n};\n\n} )();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n( function() {\n\n// Based on easing equations from Robert Penner (http://robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n} );\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n} );\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n} );\n\n} )();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Fade 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Fade Effect\n//>>group: Effects\n//>>description: Fades the element.\n//>>docs: https://api.jqueryui.com/fade-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectFade = $.effects.define( \"fade\", \"toggle\", function( options, done ) {\n\tvar show = options.mode === \"show\";\n\n\t$( this )\n\t\t.css( \"opacity\", show ? 0 : 1 )\n\t\t.animate( {\n\t\t\topacity: show ? 1 : 0\n\t\t}, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Size 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Size Effect\n//>>group: Effects\n//>>description: Resize an element to a specified width and height.\n//>>docs: https://api.jqueryui.com/size-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectSize = $.effects.define( \"size\", function( options, done ) {\n\n\t// Create element\n\tvar baseline, factor, temp,\n\t\telement = $( this ),\n\n\t\t// Copy for children\n\t\tcProps = [ \"fontSize\" ],\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\n\n\t\t// Set options\n\t\tmode = options.mode,\n\t\trestore = mode !== \"effect\",\n\t\tscale = options.scale || \"both\",\n\t\torigin = options.origin || [ \"middle\", \"center\" ],\n\t\tposition = element.css( \"position\" ),\n\t\tpos = element.position(),\n\t\toriginal = $.effects.scaledDimensions( element ),\n\t\tfrom = options.from || original,\n\t\tto = options.to || $.effects.scaledDimensions( element, 0 );\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( mode === \"show\" ) {\n\t\ttemp = from;\n\t\tfrom = to;\n\t\tto = temp;\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: from.height / original.height,\n\t\t\tx: from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: to.height / original.height,\n\t\t\tx: to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === \"box\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, vProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, vProps, factor.to.y, to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tfrom = $.effects.setTransition( element, hProps, factor.from.x, from );\n\t\t\tto = $.effects.setTransition( element, hProps, factor.to.x, to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, cProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, cProps, factor.to.y, to );\n\t\t}\n\t}\n\n\t// Adjust the position properties based on the provided origin points\n\tif ( origin ) {\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tfrom.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;\n\t\tfrom.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;\n\t\tto.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;\n\t\tto.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;\n\t}\n\tdelete from.outerHeight;\n\tdelete from.outerWidth;\n\telement.css( from );\n\n\t// Animate the children if desired\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\tvProps = vProps.concat( [ \"marginTop\", \"marginBottom\" ] ).concat( cProps );\n\t\thProps = hProps.concat( [ \"marginLeft\", \"marginRight\" ] );\n\n\t\t// Only animate children with width attributes specified\n\t\t// TODO: is this right? should we include anything with css width specified as well\n\t\telement.find( \"*[width]\" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tchildOriginal = $.effects.scaledDimensions( child ),\n\t\t\t\tchildFrom = {\n\t\t\t\t\theight: childOriginal.height * factor.from.y,\n\t\t\t\t\twidth: childOriginal.width * factor.from.x,\n\t\t\t\t\touterHeight: childOriginal.outerHeight * factor.from.y,\n\t\t\t\t\touterWidth: childOriginal.outerWidth * factor.from.x\n\t\t\t\t},\n\t\t\t\tchildTo = {\n\t\t\t\t\theight: childOriginal.height * factor.to.y,\n\t\t\t\t\twidth: childOriginal.width * factor.to.x,\n\t\t\t\t\touterHeight: childOriginal.height * factor.to.y,\n\t\t\t\t\touterWidth: childOriginal.width * factor.to.x\n\t\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );\n\t\t\t}\n\n\t\t\tif ( restore ) {\n\t\t\t\t$.effects.saveStyle( child );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( childFrom );\n\t\t\tchild.animate( childTo, options.duration, options.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restoreStyle( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Animate\n\telement.animate( to, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: function() {\n\n\t\t\tvar offset = element.offset();\n\n\t\t\tif ( to.opacity === 0 ) {\n\t\t\t\telement.css( \"opacity\", from.opacity );\n\t\t\t}\n\n\t\t\tif ( !restore ) {\n\t\t\t\telement\n\t\t\t\t\t.css( \"position\", position === \"static\" ? \"relative\" : position )\n\t\t\t\t\t.offset( offset );\n\n\t\t\t\t// Need to save style here so that automatic style restoration\n\t\t\t\t// doesn't restore to the original styles from before the animation.\n\t\t\t\t$.effects.saveStyle( element );\n\t\t\t}\n\n\t\t\tdone();\n\t\t}\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Scale 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Scale Effect\n//>>group: Effects\n//>>description: Grows or shrinks an element and its content.\n//>>docs: https://api.jqueryui.com/scale-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectScale = $.effects.define( \"scale\", function( options, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tmode = options.mode,\n\t\tpercent = parseInt( options.percent, 10 ) ||\n\t\t\t( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== \"effect\" ? 0 : 100 ) ),\n\n\t\tnewOptions = $.extend( true, {\n\t\t\tfrom: $.effects.scaledDimensions( el ),\n\t\t\tto: $.effects.scaledDimensions( el, percent, options.direction || \"both\" ),\n\t\t\torigin: options.origin || [ \"middle\", \"center\" ]\n\t\t}, options );\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tnewOptions.from.opacity = 1;\n\t\tnewOptions.to.opacity = 0;\n\t}\n\n\t$.effects.effect.size.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Puff 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Puff Effect\n//>>group: Effects\n//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.\n//>>docs: https://api.jqueryui.com/puff-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectPuff = $.effects.define( \"puff\", \"hide\", function( options, done ) {\n\tvar newOptions = $.extend( true, {}, options, {\n\t\tfade: true,\n\t\tpercent: parseInt( options.percent, 10 ) || 150\n\t} );\n\n\t$.effects.effect.scale.call( this, newOptions, done );\n} );\n\n\n\n\n} );", "import {Application} from '@hotwired/stimulus'\nimport {StripeController} from './controllers/stripe.controller';\nimport {EmailAddressController} from './controllers/email-address.controller';\nimport {DropzoneController} from './controllers/dropzone.controller';\nimport {SelectToggleController} from './controllers/select-toggle.controller';\nimport {DatepickerController} from './controllers/datepicker.controller';\nimport {RemovableController} from './controllers/removable.controller';\nimport {CheckboxSelectAllController} from './controllers/checkbox-select-all.controller';\nimport {MergeFieldsController} from './controllers/merge-fields.controller';\nimport {RadioToggleController} from './controllers/radio-toggle.controller';\nimport {SortableController} from './controllers/sortable.controller';\nimport {InvoiceItemFormController} from './controllers/invoice-item-form.controller';\nimport {NestedFormController} from \"./controllers/nested-form.controller\";\nimport Reveal from '@stimulus-components/reveal';\nimport {DisableController} from './controllers/disable.controller';\n\n// All the jquery stuff. Take care, imports are awaited in Promise.all style, so jquery is not available when not using import() or require!\nimport './vendor/jquery'\nimport './vendor/jquery-ui'\nimport 'jquery-ui/themes/base/all.css'\n\nimport 'jquery-slimscroll';\n//\nimport 'jquery.fancytree'\nimport 'jquery.fancytree/dist/skin-win8/ui.fancytree.css'\n\nimport Bootbox from 'bootbox'\nimport {CopyClipboardController} from \"./controllers/copy-clipboard.controller\";\nimport {DropdownValueCounterController} from \"./controllers/dropdown-value-counter.controller\";\nimport {ListSearchController} from \"./controllers/list-search.controller\";\nimport {AddressAutocompleteController} from \"./controllers/address-autocomplete.controller\";\nimport \"./components/address-autocomplete.css\";\nimport {PlanningCalendarController} from \"./controllers/planning-calendar.controller\";\nimport {TariffRowsController} from \"./controllers/tariff-rows.controller\";\nimport {TariffTemplateCopyController} from \"./controllers/tariff-template-copy.controller\";\nimport {TariffSelectController} from \"./controllers/tariff-select.controller\";\nimport {TariffModeController} from \"./controllers/tariff-mode.controller\";\nimport {BulkReservationInviteController} from \"./controllers/bulk-reservation-invite.controller\";\nimport {DeviceClassController} from \"./controllers/device-class.controller\";\nimport {BurnoutableTableController} from \"./controllers/burnoutable-table.controller\";\nimport {ScrollSyncController} from \"./controllers/scroll-sync.controller\";\nimport {SearchViewController} from \"./controllers/search-view.controller\";\nimport {ColumnPickerController} from \"./controllers/column-picker.controller\";\nimport {RelativeDateController} from \"./controllers/relative-date.controller\";\nimport {StickyTableHeaderController} from \"./controllers/sticky-table-header.controller\";\nimport {LazyLoadingController} from \"./controllers/lazy-loading.controller\";\nimport {NumberRangePreviewController} from \"./controllers/number-range-preview.controller\";\n\n// All the jquery stuff. Take care, imports are awaited in Promise.all style, so jquery is not available when not using import() or require!\n// import '@rails/ujs'\n// import '@rails/activestorage'\n// import './components/direct_upload.css'\n// import('./components/bootstrap')\n// import('./components/adminlte')\n// // import '../assets/fonts/fonts.css'\n// import('./components/bootstrap_confirm')\n// import('./components/scrolling')\n//\n// import('./components/ajax_error_handling')\n// import('./components/mouse_wait_on_ajax')\n// import './components/datepicker/custom-bs3.scss';\n// import('./components/select2');\n// import './components/bootbox'\n// import './components/dropzone';\n\nwindow.bootbox = Bootbox;\n\nrequire('@rails/ujs').start();\nrequire('@rails/activestorage').start();\nrequire('./components/direct_upload.css')\nrequire('./components/bootstrap')\nrequire('./components/adminlte')\nrequire('./../assets/fonts/fonts.css')\nrequire('./components/bootstrap_confirm')\nrequire('./components/scrolling')\n\nrequire('jquery-slimscroll');\n\nrequire('jquery.fancytree')\nrequire('jquery.fancytree/dist/skin-win8/ui.fancytree.css')\n\nrequire('./components/ajax_error_handling')\nrequire('./components/mouse_wait_on_ajax')\nrequire('./components/prevent_number_input_scroll')\n\n$.AdminLTE.options.controlSidebarOptions.slide = true;\n$.fn.modal.Constructor.prototype.enforceFocus = function () {};\nrequire('./components/datepicker/custom-bs3.scss');\nrequire('./components/select2');\nrequire('./components/bootbox');\nrequire('./components/dropzone');\nrequire('vis-timeline/styles/vis-timeline-graph2d.css');\nrequire('./components/planning_calendar/planning_calendar.scss');\nrequire('./components/search_table.scss');\n\nconst application = Application.start();\napplication.register('stripe', StripeController);\napplication.register('dropzone', DropzoneController);\napplication.register('email-address', EmailAddressController);\napplication.register('stripe', StripeController);\napplication.register('select-toggle', SelectToggleController);\napplication.register('radio-toggle', RadioToggleController);\napplication.register('datepicker', DatepickerController);\napplication.register('nested-form', NestedFormController);\napplication.register('removable', RemovableController);\napplication.register('checkbox-select-all', CheckboxSelectAllController);\napplication.register('merge-field', MergeFieldsController);\napplication.register('sortable', SortableController);\napplication.register('invoice-item-form', InvoiceItemFormController);\napplication.register('reveal', Reveal);\napplication.register('disable', DisableController)\napplication.register('copy-clipboard', CopyClipboardController)\napplication.register('dropdown-value-counter', DropdownValueCounterController)\napplication.register('list-search', ListSearchController)\napplication.register('address-autocomplete', AddressAutocompleteController)\napplication.register('planning-calendar', PlanningCalendarController)\napplication.register('tariff-rows', TariffRowsController)\napplication.register('tariff-template-copy', TariffTemplateCopyController)\napplication.register('tariff-select', TariffSelectController)\napplication.register('tariff-mode', TariffModeController)\napplication.register('bulk-reservation-invite', BulkReservationInviteController)\napplication.register('device-class', DeviceClassController)\napplication.register('burnoutable-table', BurnoutableTableController)\napplication.register('scroll-sync', ScrollSyncController)\napplication.register('search-view', SearchViewController)\napplication.register('column-picker', ColumnPickerController)\napplication.register('relative-date', RelativeDateController)\napplication.register('sticky-table-header', StickyTableHeaderController)\napplication.register('lazy-loading', LazyLoadingController)\napplication.register('number-range-preview', NumberRangePreviewController)\n", "// app/javascript/controllers/copy_clipboard_controller.js\nimport { Controller } from \"@hotwired/stimulus\"\n\nexport class CopyClipboardController extends Controller {\n  static values = { text: String, copied: String }\n\n  connect() {\n    this.element.addEventListener(\"click\", this.copy.bind(this))\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\"click\", this.copy.bind(this))\n  }\n\n  copy(event) {\n    event.preventDefault()\n    if (!navigator.clipboard || !window.isSecureContext) return\n\n    const text = this.textValue\n    if (!text) return\n\n    navigator.clipboard.writeText(text).then(() => {\n      this.showCopiedFeedback()\n    })\n  }\n\n  showCopiedFeedback() {\n    const originalContent = this.element.innerHTML\n    this.element.innerHTML = this.copiedValue;\n    setTimeout(() => {\n      this.element.innerHTML = originalContent\n    }, 1200)\n  }\n}", "import { Controller } from \"@hotwired/stimulus\";\n\nexport class DropdownValueCounterController extends Controller {\n    static values = {\n        groups: Object,\n    }\n\n    static targets = [\n        'select',\n        'container',\n        'groupTemplate',\n        'itemTemplate'\n    ]\n\n    connect() {\n        this.selectTargets.forEach(selectElement => {\n            selectElement.addEventListener('change', () => {\n                this.recalculateStats();\n            })\n        })\n        this.recalculateStats();\n    }\n\n    recalculateStats() {\n        const selectedIds = [];\n        this.selectTargets.forEach(selectElement => {\n            Array.from(selectElement.selectedOptions).forEach(option => {\n                if (option.value) selectedIds.push(option.value);\n            });\n        });\n\n        const idCounts = {};\n        selectedIds.forEach(id => {\n            idCounts[id] = (idCounts[id] || 0) + 1;\n        });\n\n        this.containerTarget.innerHTML = '';\n\n        Object.entries(this.groupsValue).forEach(([groupName, idArray]) => {\n            const groupItems = [];\n            let groupSum = 0;\n\n            idArray.forEach(id => {\n                const count = idCounts[id] || 0;\n\n                // Label aus irgendeinem Select-Option-Text holen:\n                let label = '';\n                for (const select of this.selectTargets) {\n                    const option = Array.from(select.options).find(opt => opt.value === id);\n                    if (option) {\n                        label = option.text;\n                        break;\n                    }\n                }\n\n                if (label && count > 0) {\n                    groupItems.push({\n                        name: label,\n                        value: count\n                    });\n                    groupSum += count;\n                }\n            });\n\n            // if (groupItems.length > 0) {\n                const groupNode = this.groupTemplateTarget.cloneNode(true);\n                groupNode.style.display = '';\n                // Wichtig: Entferne das Target-Attribut!\n                groupNode.removeAttribute('data-dropdown-value-counter-target');\n\n                groupNode.innerHTML = groupNode.innerHTML\n                    .replace(/__GROUP_NAME__/g, groupName)\n                    .replace(/__GROUP_VALUE__/g, groupSum);\n\n                const ul = groupNode.querySelector('ul');\n                ul.innerHTML = '';\n                groupItems.forEach(item => {\n                    const itemNode = this.itemTemplateTarget.cloneNode(true);\n                    itemNode.style.display = '';\n                    // Wichtig: Entferne das Target-Attribut!\n                    itemNode.removeAttribute('data-dropdown-value-counter-target');\n\n                    itemNode.innerHTML = itemNode.innerHTML\n                        .replace(/__ITEM_NAME__/g, item.name)\n                        .replace(/__ITEM_VALUE__/g, item.value);\n                    ul.appendChild(itemNode);\n                });\n\n                this.containerTarget.appendChild(groupNode);\n            // }\n        });\n    }\n}\n", "import {Controller} from '@hotwired/stimulus';\n\nexport class ListSearchController extends Controller {\n\n    static targets = [\"searchables\", \"searchInput\"]\n\n    connect() {\n        this.searchInputTarget.addEventListener('keyup', () => this.filter())\n    }\n\n    filter() {\n        this.searchablesTargets.forEach(el => {\n            el.hidden = !el.innerText.toLowerCase().includes(this.searchInputTarget.value.toLowerCase())\n        })\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\n\nexport class AddressAutocompleteController extends Controller {\n\n    static targets = ['street', 'zip', 'town', 'country', 'federalState', 'results']\n\n    connect() {\n        this.sessionToken = this.generateSessionToken();\n        this.debounceTimer = null;\n        this.resultsVisible = false;\n        this.selectedIndex = -1;\n        this.suggestions = [];\n\n        this.handleDocumentClick = this.handleDocumentClick.bind(this);\n        this.handleWindowResize = this.handleWindowResize.bind(this);\n        document.addEventListener('click', this.handleDocumentClick);\n        window.addEventListener('resize', this.handleWindowResize);\n    }\n\n    disconnect() {\n        document.removeEventListener('click', this.handleDocumentClick);\n        window.removeEventListener('resize', this.handleWindowResize);\n        if (this.debounceTimer) clearTimeout(this.debounceTimer);\n    }\n\n    onInput() {\n        const query = this.streetTarget.value.trim();\n        if (query.length < 3) {\n            this.hideResults();\n            return;\n        }\n\n        if (this.debounceTimer) clearTimeout(this.debounceTimer);\n        this.debounceTimer = setTimeout(() => this.fetchSuggestions(query), 300);\n    }\n\n    onKeydown(event) {\n        if (!this.resultsVisible) return;\n\n        switch (event.key) {\n            case 'ArrowDown':\n                event.preventDefault();\n                this.selectedIndex = Math.min(this.selectedIndex + 1, this.suggestions.length - 1);\n                this.highlightResult();\n                break;\n            case 'ArrowUp':\n                event.preventDefault();\n                this.selectedIndex = Math.max(this.selectedIndex - 1, 0);\n                this.highlightResult();\n                break;\n            case 'Enter':\n                event.preventDefault();\n                if (this.selectedIndex >= 0 && this.suggestions[this.selectedIndex]) {\n                    this.selectPlace(this.suggestions[this.selectedIndex]);\n                }\n                break;\n            case 'Escape':\n                event.preventDefault();\n                this.hideResults();\n                break;\n        }\n    }\n\n    async fetchSuggestions(query) {\n        try {\n            const params = new URLSearchParams({\n                input: query,\n                session_token: this.sessionToken\n            });\n            const response = await fetch(`/places/autocomplete?${params}`);\n            if (!response.ok) return;\n\n            this.suggestions = await response.json();\n            if (Array.isArray(this.suggestions) && this.suggestions.length > 0) {\n                this.showResults(this.suggestions);\n            } else {\n                this.hideResults();\n            }\n        } catch (e) {\n            // Silently ignore network errors\n        }\n    }\n\n    async selectPlace(suggestion) {\n        this.hideResults();\n\n        try {\n            const params = new URLSearchParams({\n                place_id: suggestion.place_id,\n                session_token: this.sessionToken\n            });\n            const response = await fetch(`/places/details?${params}`);\n            if (!response.ok) return;\n\n            const data = await response.json();\n            this.fillAddressFields(data);\n\n            // Generate a new session token for the next autocomplete cycle\n            this.sessionToken = this.generateSessionToken();\n        } catch (e) {\n            // Silently ignore network errors\n        }\n    }\n\n    fillAddressFields(data) {\n        if (this.hasStreetTarget) {\n            this.streetTarget.value = data.street_name || '';\n        }\n        if (this.hasZipTarget) {\n            this.zipTarget.value = data.zip || '';\n        }\n        if (this.hasTownTarget) {\n            this.townTarget.value = data.town || '';\n        }\n        if (this.hasCountryTarget && data.country_id) {\n            $(this.countryTarget).select2('val', String(data.country_id));\n        }\n        if (this.hasFederalStateTarget && data.federal_state_id) {\n            $(this.federalStateTarget).select2('data', {\n                id: data.federal_state_id,\n                text: data.federal_state_name\n            });\n        }\n    }\n\n    showResults(suggestions) {\n        this.selectedIndex = -1;\n        let dropdown = this.resultsTarget;\n        dropdown.innerHTML = '';\n        suggestions.forEach((s, index) => {\n            const item = document.createElement('div');\n            item.className = 'address-autocomplete-item';\n            item.textContent = s.description;\n            item.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                this.selectPlace(s);\n            });\n            item.addEventListener('mouseenter', () => {\n                this.selectedIndex = index;\n                this.highlightResult();\n            });\n            dropdown.appendChild(item);\n        });\n        this.positionDropdown();\n        dropdown.style.display = 'block';\n        this.resultsVisible = true;\n    }\n\n    hideResults() {\n        if (this.hasResultsTarget) {\n            this.resultsTarget.style.display = 'none';\n            this.resultsTarget.innerHTML = '';\n        }\n        this.resultsVisible = false;\n        this.selectedIndex = -1;\n    }\n\n    highlightResult() {\n        if (!this.hasResultsTarget) return;\n        const items = this.resultsTarget.querySelectorAll('.address-autocomplete-item');\n        items.forEach((item, i) => {\n            item.classList.toggle('active', i === this.selectedIndex);\n        });\n    }\n\n    handleDocumentClick(event) {\n        if (!this.element.contains(event.target)) {\n            this.hideResults();\n        }\n    }\n\n    handleWindowResize() {\n        if (this.resultsVisible) {\n            this.positionDropdown();\n        }\n    }\n\n    positionDropdown() {\n        if (!this.hasStreetTarget || !this.hasResultsTarget) return;\n\n        const containerRect = this.element.getBoundingClientRect();\n        const inputRect = this.streetTarget.getBoundingClientRect();\n\n        this.resultsTarget.style.top = `${inputRect.bottom - containerRect.top}px`;\n        this.resultsTarget.style.left = `${inputRect.left - containerRect.left}px`;\n        this.resultsTarget.style.width = `${inputRect.width}px`;\n    }\n\n    generateSessionToken() {\n        return crypto.randomUUID();\n    }\n}\n", "function styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nexport default styleInject;\n", "//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        var flags = null,\n            parsedParts = false,\n            isNowValid = m._d && !isNaN(m._d.getTime());\n        if (isNowValid) {\n            flags = getParsingFlags(m);\n            parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            isNowValid =\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidEra &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n        }\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        } else {\n            return isNowValid;\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {\n        D: 'date',\n        dates: 'date',\n        date: 'date',\n        d: 'day',\n        days: 'day',\n        day: 'day',\n        e: 'weekday',\n        weekdays: 'weekday',\n        weekday: 'weekday',\n        E: 'isoWeekday',\n        isoweekdays: 'isoWeekday',\n        isoweekday: 'isoWeekday',\n        DDD: 'dayOfYear',\n        dayofyears: 'dayOfYear',\n        dayofyear: 'dayOfYear',\n        h: 'hour',\n        hours: 'hour',\n        hour: 'hour',\n        ms: 'millisecond',\n        milliseconds: 'millisecond',\n        millisecond: 'millisecond',\n        m: 'minute',\n        minutes: 'minute',\n        minute: 'minute',\n        M: 'month',\n        months: 'month',\n        month: 'month',\n        Q: 'quarter',\n        quarters: 'quarter',\n        quarter: 'quarter',\n        s: 'second',\n        seconds: 'second',\n        second: 'second',\n        gg: 'weekYear',\n        weekyears: 'weekYear',\n        weekyear: 'weekYear',\n        GG: 'isoWeekYear',\n        isoweekyears: 'isoWeekYear',\n        isoweekyear: 'isoWeekYear',\n        w: 'week',\n        weeks: 'week',\n        week: 'week',\n        W: 'isoWeek',\n        isoweeks: 'isoWeek',\n        isoweek: 'isoWeek',\n        y: 'year',\n        years: 'year',\n        year: 'year',\n    };\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {\n        date: 9,\n        day: 11,\n        weekday: 11,\n        isoWeekday: 11,\n        dayOfYear: 4,\n        hour: 13,\n        millisecond: 16,\n        minute: 14,\n        month: 8,\n        quarter: 7,\n        second: 15,\n        weekYear: 1,\n        isoWeekYear: 1,\n        week: 5,\n        isoWeek: 5,\n        year: 1,\n    };\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        match1to2NoLeadingZero = /^[1-9]\\d?/, //         1-99\n        match1to2HasZero = /^([1-9]\\d|\\d)/, //           0-99\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        if (!mom.isValid()) {\n            return NaN;\n        }\n\n        var d = mom._d,\n            isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n            case 'Seconds':\n                return isUTC ? d.getUTCSeconds() : d.getSeconds();\n            case 'Minutes':\n                return isUTC ? d.getUTCMinutes() : d.getMinutes();\n            case 'Hours':\n                return isUTC ? d.getUTCHours() : d.getHours();\n            case 'Date':\n                return isUTC ? d.getUTCDate() : d.getDate();\n            case 'Day':\n                return isUTC ? d.getUTCDay() : d.getDay();\n            case 'Month':\n                return isUTC ? d.getUTCMonth() : d.getMonth();\n            case 'FullYear':\n                return isUTC ? d.getUTCFullYear() : d.getFullYear();\n            default:\n                return NaN; // Just in case\n        }\n    }\n\n    function set$1(mom, unit, value) {\n        var d, isUTC, year, month, date;\n\n        if (!mom.isValid() || isNaN(value)) {\n            return;\n        }\n\n        d = mom._d;\n        isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return void (isUTC\n                    ? d.setUTCMilliseconds(value)\n                    : d.setMilliseconds(value));\n            case 'Seconds':\n                return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n            case 'Minutes':\n                return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n            case 'Hours':\n                return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n            case 'Date':\n                return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n            // case 'Day': // Not real\n            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n            // case 'Month': // Not used because we need to pass two variables\n            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n            case 'FullYear':\n                break; // See below ...\n            default:\n                return; // Just in case\n        }\n\n        year = value;\n        month = mom.month();\n        date = mom.date();\n        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n        void (isUTC\n            ? d.setUTCFullYear(year, month, date)\n            : d.setFullYear(year, month, date));\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // PARSING\n\n    addRegexToken('M', match1to2, match1to2NoLeadingZero);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        var month = value,\n            date = mom.date();\n\n        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n        void (mom._isUTC\n            ? mom._d.setUTCMonth(month, date)\n            : mom._d.setMonth(month, date));\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            shortP,\n            longP;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortP = regexEscape(this.monthsShort(mom, ''));\n            longP = regexEscape(this.months(mom, ''));\n            shortPieces.push(shortP);\n            longPieces.push(longP);\n            mixedPieces.push(longP);\n            mixedPieces.push(shortP);\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // PARSING\n\n    addRegexToken('w', match1to2, match1to2NoLeadingZero);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2, match1to2NoLeadingZero);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n              ? weekdays[m.day()]\n              : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n              ? this._weekdaysShort[m.day()]\n              : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n              ? this._weekdaysMin[m.day()]\n              : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        var day = get(this, 'Day');\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2, match1to2HasZero);\n    addRegexToken('h', match1to2, match1to2NoLeadingZero);\n    addRegexToken('k', match1to2, match1to2NoLeadingZero);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        // Ensure name is available and function returns boolean\n        return !!(name && name.match('^[^/\\\\\\\\]*$'));\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                      ? DATE\n                      : a[HOUR] < 0 ||\n                          a[HOUR] > 24 ||\n                          (a[HOUR] === 24 &&\n                              (a[MINUTE] !== 0 ||\n                                  a[SECOND] !== 0 ||\n                                  a[MILLISECOND] !== 0))\n                        ? HOUR\n                        : a[MINUTE] < 0 || a[MINUTE] > 59\n                          ? MINUTE\n                          : a[SECOND] < 0 || a[SECOND] > 59\n                            ? SECOND\n                            : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                              ? MILLISECOND\n                              : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n              ? 'lastWeek'\n              : diff < 0\n                ? 'lastDay'\n                : diff < 1\n                  ? 'sameDay'\n                  : diff < 2\n                    ? 'nextDay'\n                    : diff < 7\n                      ? 'nextWeek'\n                      : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            erasName,\n            erasAbbr,\n            erasNarrow,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            erasName = regexEscape(eras[i].name);\n            erasAbbr = regexEscape(eras[i].abbr);\n            erasNarrow = regexEscape(eras[i].narrow);\n\n            namePieces.push(erasName);\n            abbrPieces.push(erasAbbr);\n            narrowPieces.push(erasNarrow);\n            mixedPieces.push(erasName);\n            mixedPieces.push(erasAbbr);\n            mixedPieces.push(erasNarrow);\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday() + this.localeData()._week.dow,\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // PARSING\n\n    addRegexToken('D', match1to2, match1to2NoLeadingZero);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // PARSING\n\n    addRegexToken('m', match1to2, match1to2HasZero);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // PARSING\n\n    addRegexToken('s', match1to2, match1to2HasZero);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y'),\n        valueOf$1 = asMilliseconds;\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.30.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n", "//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return de;\n\n})));\n", "//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return es;\n\n})));\n", "//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsStrictRegex =\n            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsShortStrictRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n        monthsRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsParse = [\n            /^janv/i,\n            /^févr/i,\n            /^mars/i,\n            /^avr/i,\n            /^mai/i,\n            /^juin/i,\n            /^juil/i,\n            /^août/i,\n            /^sept/i,\n            /^oct/i,\n            /^nov/i,\n            /^déc/i,\n        ];\n\n    var fr = moment.defineLocale('fr', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            w: 'une semaine',\n            ww: '%d semaines',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fr;\n\n})));\n", "//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var it = moment.defineLocale('it', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return (\n                    '[Oggi a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextDay: function () {\n                return (\n                    '[Domani a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextWeek: function () {\n                return (\n                    'dddd [a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastDay: function () {\n                return (\n                    '[Ieri a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return (\n                            '[La scorsa] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                  ? ' '\n                                  : \"ll'\") +\n                            ']LT'\n                        );\n                    default:\n                        return (\n                            '[Lo scorso] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                  ? ' '\n                                  : \"ll'\") +\n                            ']LT'\n                        );\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'tra %s',\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            w: 'una settimana',\n            ww: '%d settimane',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return it;\n\n})));\n", "//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ja = moment.defineLocale('ja', {\n        eras: [\n            {\n                since: '2019-05-01',\n                offset: 1,\n                name: '令和',\n                narrow: '㋿',\n                abbr: 'R',\n            },\n            {\n                since: '1989-01-08',\n                until: '2019-04-30',\n                offset: 1,\n                name: '平成',\n                narrow: '㍻',\n                abbr: 'H',\n            },\n            {\n                since: '1926-12-25',\n                until: '1989-01-07',\n                offset: 1,\n                name: '昭和',\n                narrow: '㍼',\n                abbr: 'S',\n            },\n            {\n                since: '1912-07-30',\n                until: '1926-12-24',\n                offset: 1,\n                name: '大正',\n                narrow: '㍽',\n                abbr: 'T',\n            },\n            {\n                since: '1873-01-01',\n                until: '1912-07-29',\n                offset: 6,\n                name: '明治',\n                narrow: '㍾',\n                abbr: 'M',\n            },\n            {\n                since: '0001-01-01',\n                until: '1873-12-31',\n                offset: 1,\n                name: '西暦',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: '紀元前',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        eraYearOrdinalRegex: /(元|\\d+)年/,\n        eraYearOrdinalParse: function (input, match) {\n            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n        },\n        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日 dddd HH:mm',\n            l: 'YYYY/MM/DD',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日(ddd) HH:mm',\n        },\n        meridiemParse: /午前|午後/i,\n        isPM: function (input) {\n            return input === '午後';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar: {\n            sameDay: '[今日] LT',\n            nextDay: '[明日] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay: '[昨日] LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'y':\n                    return number === 1 ? '元年' : number + '年';\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '数秒',\n            ss: '%d秒',\n            m: '1分',\n            mm: '%d分',\n            h: '1時間',\n            hh: '%d時間',\n            d: '1日',\n            dd: '%d日',\n            M: '1ヶ月',\n            MM: '%dヶ月',\n            y: '1年',\n            yy: '%d年',\n        },\n    });\n\n    return ja;\n\n})));\n", "//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^(maart|mrt\\.?)$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            w: 'één week',\n            ww: '%d weken',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nl;\n\n})));\n", "//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsNominative =\n            'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n                '_'\n            ),\n        monthsSubjective =\n            'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n                '_'\n            ),\n        monthsParse = [\n            /^sty/i,\n            /^lut/i,\n            /^mar/i,\n            /^kwi/i,\n            /^maj/i,\n            /^cze/i,\n            /^lip/i,\n            /^sie/i,\n            /^wrz/i,\n            /^paź/i,\n            /^lis/i,\n            /^gru/i,\n        ];\n    function plural(n) {\n        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix ? 'godzina' : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'ww':\n                return result + (plural(number) ? 'tygodnie' : 'tygodni');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays:\n            'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: '%s temu',\n            s: 'kilka sekund',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: '1 dzień',\n            dd: '%d dni',\n            w: 'tydzień',\n            ww: translate,\n            M: 'miesiąc',\n            MM: translate,\n            y: 'rok',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pl;\n\n})));\n", "//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            hh: 'час_часа_часов',\n            dd: 'день_дня_дней',\n            ww: 'неделя_недели_недель',\n            MM: 'месяц_месяца_месяцев',\n            yy: 'год_года_лет',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [\n        /^янв/i,\n        /^фев/i,\n        /^мар/i,\n        /^апр/i,\n        /^ма[йя]/i,\n        /^июн/i,\n        /^июл/i,\n        /^авг/i,\n        /^сен/i,\n        /^окт/i,\n        /^ноя/i,\n        /^дек/i,\n    ];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months: {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n                '_'\n            ),\n            standalone:\n                'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n                    '_'\n                ),\n        },\n        monthsShort: {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n            standalone:\n                'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n                    '_'\n                ),\n        },\n        weekdays: {\n            standalone:\n                'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n                    '_'\n                ),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n        },\n        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex:\n            /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соответствует только сокращённым формам\n        monthsShortStrictRegex:\n            /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., H:mm',\n            LLLL: 'dddd, D MMMM YYYY г., H:mm',\n        },\n        calendar: {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'через %s',\n            past: '%s назад',\n            s: 'несколько секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'час',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            w: 'неделя',\n            ww: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM: function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ru;\n\n})));\n", "//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inci\",\n        5: \"'inci\",\n        8: \"'inci\",\n        70: \"'inci\",\n        80: \"'inci\",\n        2: \"'nci\",\n        7: \"'nci\",\n        20: \"'nci\",\n        50: \"'nci\",\n        3: \"'üncü\",\n        4: \"'üncü\",\n        100: \"'üncü\",\n        6: \"'ncı\",\n        9: \"'uncu\",\n        10: \"'uncu\",\n        30: \"'uncu\",\n        60: \"'ıncı\",\n        90: \"'ıncı\",\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n            '_'\n        ),\n        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),\n        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'öö' : 'ÖÖ';\n            } else {\n                return isLower ? 'ös' : 'ÖS';\n            }\n        },\n        meridiemParse: /öö|ÖÖ|ös|ÖS/,\n        isPM: function (input) {\n            return input === 'ös' || input === 'ÖS';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[yarın saat] LT',\n            nextWeek: '[gelecek] dddd [saat] LT',\n            lastDay: '[dün] LT',\n            lastWeek: '[geçen] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s önce',\n            s: 'birkaç saniye',\n            ss: '%d saniye',\n            m: 'bir dakika',\n            mm: '%d dakika',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            w: 'bir hafta',\n            ww: '%d hafta',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir yıl',\n            yy: '%d yıl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'ıncı\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tr;\n\n})));\n", "//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            dd: 'день_дні_днів',\n            MM: 'місяць_місяці_місяців',\n            yy: 'рік_роки_років',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n                nominative:\n                    'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n                        '_'\n                    ),\n                accusative:\n                    'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n                        '_'\n                    ),\n                genitive:\n                    'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n                        '_'\n                    ),\n            },\n            nounCase;\n\n        if (m === true) {\n            return weekdays['nominative']\n                .slice(1, 7)\n                .concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n            ? 'accusative'\n            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n              ? 'genitive'\n              : 'nominative';\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months: {\n            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n                '_'\n            ),\n            standalone:\n                'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n            '_'\n        ),\n        weekdays: weekdaysCaseReplace,\n        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY р.',\n            LLL: 'D MMMM YYYY р., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n        },\n        calendar: {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: '%s тому',\n            s: 'декілька секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'годину',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            M: 'місяць',\n            MM: relativeTimeWithPlural,\n            y: 'рік',\n            yy: relativeTimeWithPlural,\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uk;\n\n})));\n", "'use strict';\nvar 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  check(typeof this == 'object' && this) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n", "'use strict';\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n", "'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-function-prototype-bind -- safe\n  var test = (function () { /* empty */ }).bind();\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n", "'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n", "'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n  return function () {\n    return call.apply(fn, arguments);\n  };\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n", "'use strict';\nvar classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n  // Nashorn bug:\n  //   https://github.com/zloirock/core-js/issues/1128\n  //   https://github.com/zloirock/core-js/issues/1130\n  if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n", "'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n  return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n  return typeof argument == 'function';\n};\n", "'use strict';\nvar 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 NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n  return call.apply(call, arguments);\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", "'use strict';\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.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(it, '') : $Object(it);\n} : $Object;\n", "'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n  return it === null || it === undefined;\n};\n", "'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n  return it;\n};\n", "'use strict';\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", "'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n", "'use strict';\nmodule.exports = {};\n", "'use strict';\nvar path = require('../internals/path');\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (variable) {\n  return isCallable(variable) ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(globalThis[namespace])\n    : path[namespace] && path[namespace][method] || globalThis[namespace] && globalThis[namespace][method];\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n", "'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && 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;\n", "'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol('symbol detection');\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n  // of course, fail.\n  return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n", "'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n  !Symbol.sham &&\n  typeof Symbol.iterator == 'symbol';\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n", "'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n  try {\n    return $String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n", "'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n", "'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n", "'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw new $TypeError(\"Can't convert object to primitive value\");\n};\n", "'use strict';\nmodule.exports = true;\n", "'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    globalThis[key] = value;\n  } return value;\n};\n", "'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n  version: '3.44.0',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n  license: 'https://github.com/zloirock/core-js/blob/v3.44.0/LICENSE',\n  source: 'https://github.com/zloirock/core-js'\n});\n", "'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n  return store[key] || (store[key] = value || {});\n};\n", "'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return $Object(requireObjectCoercible(argument));\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.1.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name)) {\n    WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n      ? Symbol[name]\n      : createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n", "'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw new $TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n", "'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.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", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a !== 7;\n});\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\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 = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n", "'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\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    : isCallable(detection) ? 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", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n    value: 42,\n    writable: false\n  }).prototype !== 42;\n});\n", "'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw new $TypeError($String(argument) + ' is not an object');\n};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n    var current = $getOwnPropertyDescriptor(O, P);\n    if (current && current[WRITABLE]) {\n      O[P] = Attributes.value;\n      Attributes = {\n        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n        writable: false\n      };\n    }\n  } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\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 new $TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n", "'use strict';\nvar 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", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar apply = require('../internals/function-apply');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar isCallable = require('../internals/is-callable');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\n// add debugging info\nrequire('../internals/shared-store');\n\nvar wrapConstructor = function (NativeConstructor) {\n  var Wrapper = function (a, b, c) {\n    if (this instanceof Wrapper) {\n      switch (arguments.length) {\n        case 0: return new NativeConstructor();\n        case 1: return new NativeConstructor(a);\n        case 2: return new NativeConstructor(a, b);\n      } return new NativeConstructor(a, b, c);\n    } return apply(NativeConstructor, this, arguments);\n  };\n  Wrapper.prototype = NativeConstructor.prototype;\n  return Wrapper;\n};\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.dontCallGetSet - prevent calling a getter on target\n  options.name           - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var PROTO = options.proto;\n\n  var nativeSource = GLOBAL ? globalThis : STATIC ? globalThis[TARGET] : globalThis[TARGET] && globalThis[TARGET].prototype;\n\n  var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET];\n  var targetPrototype = target.prototype;\n\n  var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n  var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n  for (key in source) {\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contains in native\n    USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key);\n\n    targetProperty = target[key];\n\n    if (USE_NATIVE) if (options.dontCallGetSet) {\n      descriptor = getOwnPropertyDescriptor(nativeSource, key);\n      nativeProperty = descriptor && descriptor.value;\n    } else nativeProperty = nativeSource[key];\n\n    // export native or implementation\n    sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n    if (!FORCED && !PROTO && typeof targetProperty == typeof sourceProperty) continue;\n\n    // bind methods to global for calling from export context\n    if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, globalThis);\n    // wrap global constructors for prevent changes in this version\n    else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n    // make static versions for prototype methods\n    else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty);\n    // default case\n    else resultProperty = sourceProperty;\n\n    // add a flag to not completely full polyfills\n    if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(resultProperty, 'sham', true);\n    }\n\n    createNonEnumerableProperty(target, key, resultProperty);\n\n    if (PROTO) {\n      VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n      if (!hasOwn(path, VIRTUAL_PROTOTYPE)) {\n        createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n      }\n      // export virtual prototype methods\n      createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty);\n      // export real prototype methods\n      if (options.real && targetPrototype && (FORCED || !targetPrototype[key])) {\n        createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n      }\n    }\n  }\n};\n", "'use strict';\nvar 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(argument) {\n  return classof(argument) === 'Array';\n};\n", "'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n  var n = +x;\n  return (n > 0 ? floor : ceil)(n);\n};\n", "'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- NaN check\n  return number !== number || number === 0 ? 0 : trunc(number);\n};\n", "'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  var len = toIntegerOrInfinity(argument);\n  return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n", "'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n", "'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n  if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n  return it;\n};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));\n  else object[key] = value;\n};\n", "'use strict';\nvar 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", "'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\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' && isCallable(O.callee) ? 'Arguments' : result;\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.test(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n  if (!isCallable(argument)) return false;\n  try {\n    construct(noop, [], argument);\n    return true;\n  } catch (error) {\n    return false;\n  }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n  if (!isCallable(argument)) return false;\n  switch (classof(argument)) {\n    case 'AsyncFunction':\n    case 'GeneratorFunction':\n    case 'AsyncGeneratorFunction': return false;\n  }\n  try {\n    // we can't check .prototype since constructors produced by .bind haven't it\n    // `Function#toString` throws on some built-it function in some legacy engines\n    // (for example, `DOMQuad` and similar in FF41-)\n    return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n  } catch (error) {\n    return true;\n  }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n  var called;\n  return isConstructorModern(isConstructorModern.call)\n    || !isConstructorModern(Object)\n    || !isConstructorModern(function () { called = true; })\n    || called;\n}) ? isConstructorLegacy : isConstructorModern;\n", "'use strict';\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (isConstructor(C) && (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 C === undefined ? $Array : C;\n};\n", "'use strict';\nvar arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n", "'use strict';\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/environment-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 fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\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/environment-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\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 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 || !arrayMethodHasSpeciesSupport('concat');\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, arity: 1, 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 = lengthOfArrayLike(E);\n        doesNotExceedSafeInteger(n + len);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        doesNotExceedSafeInteger(n + 1);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n", "'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n  return $String(argument);\n};\n", "'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\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 = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n", "'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\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 = lengthOfArrayLike(O);\n    if (length === 0) return !IS_INCLUDES && -1;\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", "'use strict';\nmodule.exports = {};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\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) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n", "'use strict';\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", "'use strict';\nvar 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 V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-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\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\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++], props[key]);\n  return O;\n};\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n", "'use strict';\nvar 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", "'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = 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  // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n  activeXDocument = null;\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    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\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\n// eslint-disable-next-line es/no-object-create -- safe\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 : definePropertiesModule.f(result, Properties);\n};\n", "'use strict';\nvar 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", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n", "'use strict';\n/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice');\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 arraySlice(windowNames);\n  }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && classof(it) === 'Window'\n    ? getWindowNames(it)\n    : $getOwnPropertyNames(toIndexedObject(it));\n};\n", "'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n", "'use strict';\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (target, key, value, options) {\n  if (options && options.enumerable) target[key] = value;\n  else createNonEnumerableProperty(target, key, value);\n  return target;\n};\n", "'use strict';\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n  return defineProperty.f(target, name, descriptor);\n};\n", "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n", "'use strict';\nvar path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\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 (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n", "'use strict';\nvar call = require('../internals/function-call');\nvar getBuiltIn = require('../internals/get-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function () {\n  var Symbol = getBuiltIn('Symbol');\n  var SymbolPrototype = Symbol && Symbol.prototype;\n  var valueOf = SymbolPrototype && SymbolPrototype.valueOf;\n  var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n  if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {\n    // `Symbol.prototype[@@toPrimitive]` method\n    // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\n    // eslint-disable-next-line no-unused-vars -- required for .length\n    defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n      return call(valueOf, this);\n    }, { arity: 1 });\n  }\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", "'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineProperty = require('../internals/object-define-property').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/object-to-string');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC, SET_METHOD) {\n  var target = STATIC ? it : it && it.prototype;\n  if (target) {\n    if (!hasOwn(target, TO_STRING_TAG)) {\n      defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n    }\n    if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n      createNonEnumerableProperty(target, 'toString', toString);\n    }\n  }\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n", "'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\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 TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.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 new 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  /* eslint-disable no-self-assign -- prototype methods protection */\n  store.get = store.get;\n  store.has = store.has;\n  store.set = store.set;\n  /* eslint-enable no-self-assign -- prototype methods protection */\n  set = function (it, metadata) {\n    if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    store.set(it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return store.get(it) || {};\n  };\n  has = function (it) {\n    return store.has(it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(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 hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n", "'use strict';\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` 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_REJECT = 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 length = lengthOfArrayLike(self);\n    var boundFunction = bind(callbackfn, that);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? 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(target, value);      // filter\n        } else switch (TYPE) {\n          case 4: return false;             // every\n          case 7: push(target, value);      // filterReject\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.filterReject` method\n  // https://github.com/tc39/proposal-array-filtering\n  filterReject: createMethod(7)\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\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 definePropertiesModule = require('../internals/object-define-properties');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\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/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\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';\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = globalThis.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar RangeError = globalThis.RangeError;\nvar TypeError = globalThis.TypeError;\nvar QObject = globalThis.QObject;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar WellKnownSymbolsStore = shared('wks');\n\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 fallbackDefineProperty = 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};\n\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n  })).a !== 7;\n}) ? fallbackDefineProperty : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n  var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\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 $defineProperty = function defineProperty(O, P, Attributes) {\n  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n  anObject(O);\n  var key = toPropertyKey(P);\n  anObject(Attributes);\n  if (hasOwn(AllSymbols, key)) {\n    if (!Attributes.enumerable) {\n      if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));\n      O[HIDDEN][key] = true;\n    } else {\n      if (hasOwn(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 || call($propertyIsEnumerable, 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 = toPropertyKey(V);\n  var enumerable = call(nativePropertyIsEnumerable, this, P);\n  if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n  return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n    ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n  var it = toIndexedObject(O);\n  var key = toPropertyKey(P);\n  if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n  var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n  if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(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 (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n  });\n  return result;\n};\n\nvar $getOwnPropertySymbols = function (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 (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n      push(result, 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 (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor');\n    var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n    var tag = uid(description);\n    var setter = function (value) {\n      var $this = this === undefined ? globalThis : this;\n      if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n      if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false;\n      var descriptor = createPropertyDescriptor(1, value);\n      try {\n        setSymbolDescriptor($this, tag, descriptor);\n      } catch (error) {\n        if (!(error instanceof RangeError)) throw error;\n        fallbackDefineProperty($this, tag, descriptor);\n      }\n    };\n    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n    return wrap(tag, description);\n  };\n\n  SymbolPrototype = $Symbol[PROTOTYPE];\n\n  defineBuiltIn(SymbolPrototype, 'toString', function toString() {\n    return getInternalState(this).tag;\n  });\n\n  defineBuiltIn($Symbol, 'withoutSetter', function (description) {\n    return wrap(uid(description), description);\n  });\n\n  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n  definePropertyModule.f = $defineProperty;\n  definePropertiesModule.f = $defineProperties;\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://tc39.es/ecma262/#sec-symbol.prototype.description\n    defineBuiltInAccessor(SymbolPrototype, 'description', {\n      configurable: true,\n      get: function description() {\n        return getInternalState(this).description;\n      }\n    });\n    if (!IS_PURE) {\n      defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n    }\n  }\n}\n\n$({ global: true, constructor: 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  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});\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n", "'use strict';\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\n/* eslint-disable es/no-symbol -- safe */\nmodule.exports = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor;\n", "'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.for` method\n// https://tc39.es/ecma262/#sec-symbol.for\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n  'for': function (key) {\n    var string = toString(key);\n    if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n    var symbol = getBuiltIn('Symbol')(string);\n    StringToSymbolRegistry[string] = symbol;\n    SymbolToStringRegistry[symbol] = string;\n    return symbol;\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar hasOwn = require('../internals/has-own-property');\nvar isSymbol = require('../internals/is-symbol');\nvar tryToString = require('../internals/try-to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.keyFor` method\n// https://tc39.es/ecma262/#sec-symbol.keyfor\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + ' is not a symbol');\n    if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n  }\n});\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar toString = require('../internals/to-string');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (replacer) {\n  if (isCallable(replacer)) return replacer;\n  if (!isArray(replacer)) return;\n  var rawLength = replacer.length;\n  var keys = [];\n  for (var i = 0; i < rawLength; i++) {\n    var element = replacer[i];\n    if (typeof element == 'string') push(keys, element);\n    else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));\n  }\n  var keysLength = keys.length;\n  var root = true;\n  return function (key, value) {\n    if (root) {\n      root = false;\n      return value;\n    }\n    if (isArray(this)) return value;\n    for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\n  };\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isSymbol = require('../internals/is-symbol');\nvar arraySlice = require('../internals/array-slice');\nvar getReplacerFunction = require('../internals/get-json-replacer-function');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nvar $String = String;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar exec = uncurryThis(/./.exec);\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar replace = uncurryThis(''.replace);\nvar numberToString = uncurryThis(1.1.toString);\n\nvar tester = /[\\uD800-\\uDFFF]/g;\nvar low = /^[\\uD800-\\uDBFF]$/;\nvar hi = /^[\\uDC00-\\uDFFF]$/;\n\nvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\n  var symbol = getBuiltIn('Symbol')('stringify detection');\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// https://github.com/tc39/proposal-well-formed-stringify\nvar ILL_FORMED_UNICODE = fails(function () {\n  return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n    || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nvar stringifyWithSymbolsFix = function (it, replacer) {\n  var args = arraySlice(arguments);\n  var $replacer = getReplacerFunction(replacer);\n  if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\n  args[1] = function (key, value) {\n    // some old implementations (like WebKit) could pass numbers as keys\n    if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\n    if (!isSymbol(value)) return value;\n  };\n  return apply($stringify, null, args);\n};\n\nvar fixIllFormed = function (match, offset, string) {\n  var prev = charAt(string, offset - 1);\n  var next = charAt(string, offset + 1);\n  if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {\n    return '\\\\u' + numberToString(charCodeAt(match, 0), 16);\n  } return match;\n};\n\nif ($stringify) {\n  // `JSON.stringify` method\n  // https://tc39.es/ecma262/#sec-json.stringify\n  $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {\n    // eslint-disable-next-line no-unused-vars -- required for `.length`\n    stringify: function stringify(it, replacer, space) {\n      var args = arraySlice(arguments);\n      var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);\n      return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;\n    }\n  });\n}\n", "'use strict';\nvar $ = require('../internals/export');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar toObject = require('../internals/to-object');\n\n// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); });\n\n// `Object.getOwnPropertySymbols` method\n// https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n$({ target: 'Object', stat: true, forced: FORCED }, {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n    return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];\n  }\n});\n", "'use strict';\n// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/es.symbol.constructor');\nrequire('../modules/es.symbol.for');\nrequire('../modules/es.symbol.key-for');\nrequire('../modules/es.json.stringify');\nrequire('../modules/es.object.get-own-property-symbols');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncDispose` well-known symbol\n// https://github.com/tc39/proposal-async-explicit-resource-management\ndefineWellKnownSymbol('asyncDispose');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-explicit-resource-management\ndefineWellKnownSymbol('dispose');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.match` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.matchAll` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.matchall\ndefineWellKnownSymbol('matchAll');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.search` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.species` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.split` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag(getBuiltIn('Symbol'), 'Symbol');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(globalThis.JSON, 'JSON', true);\n", "'use strict';\nrequire('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-dispose');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.dispose');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n", "'use strict';\nmodule.exports = function () { /* empty */ };\n", "'use strict';\nmodule.exports = {};\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n", "'use strict';\nvar 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", "'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\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 $Object = Object;\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  var object = toObject(O);\n  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n  var constructor = object.constructor;\n  if (isCallable(constructor) && object instanceof constructor) {\n    return constructor.prototype;\n  } return object instanceof $Object ? ObjectPrototype : null;\n};\n", "'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\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\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 = !isObject(IteratorPrototype) || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n  defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n    return this;\n  });\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\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, ENUMERABLE_NEXT) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n  } catch (error) { /* empty */ }\n};\n", "'use strict';\nvar isObject = require('../internals/is-object');\n\nmodule.exports = function (argument) {\n  return isObject(argument) || argument === null;\n};\n", "'use strict';\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (isPossiblePrototype(argument)) return argument;\n  throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n", "'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\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    setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    requireObjectCoercible(O);\n    aPossiblePrototype(proto);\n    if (!isObject(O)) return O;\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-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 defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\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 && KIND in IterablePrototype) return IterablePrototype[KIND];\n\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    }\n\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 (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n          defineBuiltIn(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.prototype.{ values, @@iterator }.name in V8 / FF\n  if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n      createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n    } else {\n      INCORRECT_VALUES_NAME = true;\n      defaultIterator = function values() { return call(nativeIterator, this); };\n    }\n  }\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        defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n  }\n  Iterators[NAME] = defaultIterator;\n\n  return methods;\n};\n", "'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n  return { value: value, done: done };\n};\n", "'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = null;\n    return createIterResultObject(undefined, true);\n  }\n  switch (state.kind) {\n    case 'keys': return createIterResultObject(index, false);\n    case 'values': return createIterResultObject(target[index], false);\n  } return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n  defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n", "'use strict';\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", "'use strict';\nrequire('../modules/es.array.iterator');\nvar DOMIterables = require('../internals/dom-iterables');\nvar globalThis = require('../internals/global-this');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  setToStringTag(globalThis[COLLECTION_NAME], COLLECTION_NAME);\n  Iterators[COLLECTION_NAME] = Iterators.Array;\n}\n", "'use strict';\nvar parent = require('../../es/symbol');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/symbol\");", "'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\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');\nvar nativeSlice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\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 = lengthOfArrayLike(O);\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 (isConstructor(Constructor) && (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(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", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar path = require('../internals/path');\n\nmodule.exports = function (CONSTRUCTOR, METHOD) {\n  var Namespace = path[CONSTRUCTOR + 'Prototype'];\n  var pureMethod = Namespace && Namespace[METHOD];\n  if (pureMethod) return pureMethod;\n  var NativeConstructor = globalThis[CONSTRUCTOR];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  return NativePrototype && NativePrototype[METHOD];\n};\n", "'use strict';\nrequire('../../../modules/es.array.slice');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'slice');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/slice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.slice;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.slice) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/slice');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/slice\");", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\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\nvar concat = uncurryThis([].concat);\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 ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar ownKeys = require('../internals/own-keys');\n\n// `Reflect.ownKeys` method\n// https://tc39.es/ecma262/#sec-reflect.ownkeys\n$({ target: 'Reflect', stat: true }, {\n  ownKeys: ownKeys\n});\n", "'use strict';\nrequire('../../modules/es.reflect.own-keys');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.ownKeys;\n", "'use strict';\nvar parent = require('../../es/reflect/own-keys');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/reflect/own-keys\");", "'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\n// `Array.isArray` method\n// https://tc39.es/ecma262/#sec-array.isarray\n$({ target: 'Array', stat: true }, {\n  isArray: isArray\n});\n", "'use strict';\nrequire('../../modules/es.array.is-array');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.isArray;\n", "'use strict';\nvar parent = require('../../es/array/is-array');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/array/is-array\");", "'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';\nrequire('../../../modules/es.array.map');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'map');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.map;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.map) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/map');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/map\");", "'use strict';\nvar $ = 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';\nrequire('../../modules/es.object.keys');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.keys;\n", "'use strict';\nvar parent = require('../../es/object/keys');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/object/keys\");", "'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Date = Date;\nvar thisTimeValue = uncurryThis($Date.prototype.getTime);\n\n// `Date.now` method\n// https://tc39.es/ecma262/#sec-date.now\n$({ target: 'Date', stat: true }, {\n  now: function now() {\n    return thisTimeValue(new $Date());\n  }\n});\n", "'use strict';\nrequire('../../modules/es.date.now');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Date.now;\n", "'use strict';\nvar parent = require('../../es/date/now');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/date/now\");", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar arraySlice = require('../internals/array-slice');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar $Function = Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n  if (!hasOwn(factories, argsLength)) {\n    var list = [];\n    var i = 0;\n    for (; i < argsLength; i++) list[i] = 'a[' + i + ']';\n    factories[argsLength] = $Function('C,a', 'return new C(' + join(list, ',') + ')');\n  } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n// eslint-disable-next-line es/no-function-prototype-bind -- detection\nmodule.exports = NATIVE_BIND ? $Function.bind : function bind(that /* , ...args */) {\n  var F = aCallable(this);\n  var Prototype = F.prototype;\n  var partArgs = arraySlice(arguments, 1);\n  var boundFunction = function bound(/* args... */) {\n    var args = concat(partArgs, arraySlice(arguments));\n    return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n  };\n  if (isObject(Prototype)) boundFunction.prototype = Prototype;\n  return boundFunction;\n};\n", "'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar bind = require('../internals/function-bind');\n\n// `Function.prototype.bind` method\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n// eslint-disable-next-line es/no-function-prototype-bind -- detection\n$({ target: 'Function', proto: true, forced: Function.bind !== bind }, {\n  bind: bind\n});\n", "'use strict';\nrequire('../../../modules/es.function.bind');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Function', 'bind');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../function/virtual/bind');\n\nvar FunctionPrototype = Function.prototype;\n\nmodule.exports = function (it) {\n  var own = it.bind;\n  return it === FunctionPrototype || (isPrototypeOf(FunctionPrototype, it) && own === FunctionPrototype.bind) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/bind');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/bind\");", "'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 -- required for testing\n    method.call(null, argument || function () { return 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", "'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n$({ target: 'Array', proto: true, forced: [].forEach !== forEach }, {\n  forEach: forEach\n});\n", "'use strict';\nrequire('../../../modules/es.array.for-each');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'forEach');\n", "'use strict';\nvar parent = require('../../../es/array/virtual/for-each');\n\nmodule.exports = parent;\n", "'use strict';\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/for-each');\nrequire('../../modules/web.dom-collections.for-each');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n  DOMTokenList: true,\n  NodeList: true\n};\n\nmodule.exports = function (it) {\n  var own = it.forEach;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.forEach)\n    || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n", "module.exports = require(\"core-js-pure/stable/instance/for-each\");", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = uncurryThis([].reverse);\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n  reverse: function reverse() {\n    // eslint-disable-next-line no-self-assign -- dirty hack\n    if (isArray(this)) this.length = this.length;\n    return nativeReverse(this);\n  }\n});\n", "'use strict';\nrequire('../../../modules/es.array.reverse');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'reverse');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/reverse');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.reverse;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reverse) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/reverse');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/reverse\");", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar isArray = require('../internals/is-array');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n  // makes no sense without proper strict mode support\n  if (this !== undefined) return true;\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).length = 1;\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n  if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n    throw new $TypeError('Cannot set read only .length');\n  } return O.length = length;\n} : function (O, length) {\n  return O.length = length;\n};\n", "'use strict';\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n  if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\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;\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 = lengthOfArrayLike(O);\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(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n    }\n    doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);\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 deletePropertyOrThrow(O, to);\n      }\n      for (k = len; k > len - actualDeleteCount + insertCount; k--) deletePropertyOrThrow(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 deletePropertyOrThrow(O, to);\n      }\n    }\n    for (k = 0; k < insertCount; k++) {\n      O[k + actualStart] = arguments[k + 2];\n    }\n    setArrayLength(O, len - actualDeleteCount + insertCount);\n    return A;\n  }\n});\n", "'use strict';\nrequire('../../../modules/es.array.splice');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'splice');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/splice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.splice;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.splice) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/splice');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/splice\");", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\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;\nvar concat = uncurryThis([].concat);\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('assign detection');\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  // eslint-disable-next-line es/no-array-prototype-foreach -- safe\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 ? concat(objectKeys(S), 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 || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n", "'use strict';\nvar $ = 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, arity: 2, forced: Object.assign !== assign }, {\n  assign: assign\n});\n", "'use strict';\nrequire('../../modules/es.object.assign');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.assign;\n", "'use strict';\nvar parent = require('../../es/object/assign');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/object/assign\");", "'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar fails = require('../internals/fails');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// FF99+ bug\nvar BROKEN_ON_SPARSE = fails(function () {\n  // eslint-disable-next-line es/no-array-prototype-includes -- detection\n  return !Array(1).includes();\n});\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n", "'use strict';\nrequire('../../../modules/es.array.includes');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'includes');\n", "'use strict';\nvar 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 isRegExp = require('../internals/is-regexp');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it) {\n  if (isRegExp(it)) {\n    throw new $TypeError(\"The method doesn't accept regular expressions\");\n  } return it;\n};\n", "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n  var regexp = /./;\n  try {\n    '/./'[METHOD_NAME](regexp);\n  } catch (error1) {\n    try {\n      regexp[MATCH] = false;\n      return '/./'[METHOD_NAME](regexp);\n    } catch (error2) { /* empty */ }\n  } return false;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~stringIndexOf(\n      toString(requireObjectCoercible(this)),\n      toString(notARegExp(searchString)),\n      arguments.length > 1 ? arguments[1] : undefined\n    );\n  }\n});\n", "'use strict';\nrequire('../../../modules/es.string.includes');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('String', 'includes');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar arrayMethod = require('../array/virtual/includes');\nvar stringMethod = require('../string/virtual/includes');\n\nvar ArrayPrototype = Array.prototype;\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n  var own = it.includes;\n  if (it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.includes)) return arrayMethod;\n  if (typeof it == 'string' || it === StringPrototype || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.includes)) {\n    return stringMethod;\n  } return own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/includes');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/includes\");", "'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n  getPrototypeOf: function getPrototypeOf(it) {\n    return nativeGetPrototypeOf(toObject(it));\n  }\n});\n\n", "'use strict';\nrequire('../../modules/es.object.get-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getPrototypeOf;\n", "'use strict';\nvar parent = require('../../es/object/get-prototype-of');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/object/get-prototype-of\");", "'use strict';\nrequire('../../../modules/es.array.concat');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'concat');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/concat');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.concat;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.concat) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/concat');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/concat\");", "'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';\nrequire('../../../modules/es.array.filter');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'filter');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/filter');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.filter;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.filter) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/filter');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/filter\");", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// in some IE versions, `propertyIsEnumerable` returns incorrect result on integer keys\n// of `null` prototype objects\nvar IE_BUG = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-create -- safe\n  var O = Object.create(null);\n  O[2] = 2;\n  return !propertyIsEnumerable(O, 2);\n});\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 IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null;\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 || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) {\n        push(result, 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", "'use strict';\nvar $ = 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", "'use strict';\nrequire('../../modules/es.object.values');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.values;\n", "'use strict';\nvar parent = require('../../es/object/values');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/object/values\");", "'use strict';\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", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n  return function ($this) {\n    var string = toString(requireObjectCoercible($this));\n    if (TYPE & 1) string = replace(string, ltrim, '');\n    if (TYPE & 2) string = replace(string, rtrim, '$1');\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", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = globalThis.parseInt;\nvar Symbol = globalThis.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n  // MS Edge 18- broken with boxed symbols\n  || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n  var S = trim(toString(string));\n  return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $parseInt = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt !== $parseInt }, {\n  parseInt: $parseInt\n});\n", "'use strict';\nrequire('../modules/es.parse-int');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseInt;\n", "'use strict';\nvar parent = require('../es/parse-int');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/parse-int\");", "'use strict';\n/* eslint-disable es/no-array-prototype-indexof -- required for testing */\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeIndexOf = uncurryThis([].indexOf);\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;\nvar FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n    var fromIndex = arguments.length > 1 ? arguments[1] : undefined;\n    return NEGATIVE_ZERO\n      // convert -0 to +0\n      ? nativeIndexOf(this, searchElement, fromIndex) || 0\n      : $indexOf(this, searchElement, fromIndex);\n  }\n});\n", "'use strict';\nrequire('../../../modules/es.array.index-of');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'indexOf');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/index-of');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.indexOf;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.indexOf) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/index-of');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/index-of\");", "'use strict';\nvar $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n  entries: function entries(O) {\n    return $entries(O);\n  }\n});\n", "'use strict';\nrequire('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n", "'use strict';\nvar parent = require('../../es/object/entries');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/object/entries\");", "'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar create = require('../internals/object-create');\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n  create: create\n});\n", "'use strict';\nrequire('../../modules/es.object.create');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nmodule.exports = function create(P, D) {\n  return Object.create(P, D);\n};\n", "'use strict';\nvar parent = require('../../es/object/create');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/object/create\");", "'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $RangeError = RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n  var str = toString(requireObjectCoercible(this));\n  var result = '';\n  var n = toIntegerOrInfinity(count);\n  if (n < 0 || n === Infinity) throw new $RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar $repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n  return function ($this, maxLength, fillString) {\n    var S = toString(requireObjectCoercible($this));\n    var intMaxLength = toLength(maxLength);\n    var stringLength = S.length;\n    var fillStr = fillString === undefined ? ' ' : toString(fillString);\n    var fillLen, stringFiller;\n    if (intMaxLength <= stringLength || fillStr === '') return S;\n    fillLen = intMaxLength - stringLength;\n    stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));\n    if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);\n    return IS_END ? S + stringFiller : stringFiller + S;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.padStart` method\n  // https://tc39.es/ecma262/#sec-string.prototype.padstart\n  start: createMethod(false),\n  // `String.prototype.padEnd` method\n  // https://tc39.es/ecma262/#sec-string.prototype.padend\n  end: createMethod(true)\n};\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar padStart = require('../internals/string-pad').start;\n\nvar $RangeError = RangeError;\nvar $isFinite = isFinite;\nvar abs = Math.abs;\nvar DatePrototype = Date.prototype;\nvar nativeDateToISOString = DatePrototype.toISOString;\nvar thisTimeValue = uncurryThis(DatePrototype.getTime);\nvar getUTCDate = uncurryThis(DatePrototype.getUTCDate);\nvar getUTCFullYear = uncurryThis(DatePrototype.getUTCFullYear);\nvar getUTCHours = uncurryThis(DatePrototype.getUTCHours);\nvar getUTCMilliseconds = uncurryThis(DatePrototype.getUTCMilliseconds);\nvar getUTCMinutes = uncurryThis(DatePrototype.getUTCMinutes);\nvar getUTCMonth = uncurryThis(DatePrototype.getUTCMonth);\nvar getUTCSeconds = uncurryThis(DatePrototype.getUTCSeconds);\n\n// `Date.prototype.toISOString` method implementation\n// https://tc39.es/ecma262/#sec-date.prototype.toisostring\n// PhantomJS / old WebKit fails here:\nmodule.exports = (fails(function () {\n  return nativeDateToISOString.call(new Date(-5e13 - 1)) !== '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n  nativeDateToISOString.call(new Date(NaN));\n})) ? function toISOString() {\n  if (!$isFinite(thisTimeValue(this))) throw new $RangeError('Invalid time value');\n  var date = this;\n  var year = getUTCFullYear(date);\n  var milliseconds = getUTCMilliseconds(date);\n  var sign = year < 0 ? '-' : year > 9999 ? '+' : '';\n  return sign + padStart(abs(year), sign ? 6 : 4, 0) +\n    '-' + padStart(getUTCMonth(date) + 1, 2, 0) +\n    '-' + padStart(getUTCDate(date), 2, 0) +\n    'T' + padStart(getUTCHours(date), 2, 0) +\n    ':' + padStart(getUTCMinutes(date), 2, 0) +\n    ':' + padStart(getUTCSeconds(date), 2, 0) +\n    '.' + padStart(milliseconds, 3, 0) +\n    'Z';\n} : nativeDateToISOString;\n", "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar toISOString = require('../internals/date-to-iso-string');\nvar classof = require('../internals/classof-raw');\nvar fails = require('../internals/fails');\n\nvar FORCED = fails(function () {\n  return new Date(NaN).toJSON() !== null\n    || call(Date.prototype.toJSON, { toISOString: function () { return 1; } }) !== 1;\n});\n\n// `Date.prototype.toJSON` method\n// https://tc39.es/ecma262/#sec-date.prototype.tojson\n$({ target: 'Date', proto: true, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  toJSON: function toJSON(key) {\n    var O = toObject(this);\n    var pv = toPrimitive(O, 'number');\n    return typeof pv == 'number' && !isFinite(pv) ? null :\n      (!('toISOString' in O) && classof(O) === 'Date') ? call(toISOString, O) : O.toISOString();\n  }\n});\n", "'use strict';\nrequire('../../modules/es.date.to-json');\nrequire('../../modules/es.json.stringify');\nvar path = require('../../internals/path');\nvar apply = require('../../internals/function-apply');\n\n// eslint-disable-next-line es/no-json -- safe\nif (!path.JSON) path.JSON = { stringify: JSON.stringify };\n\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nmodule.exports = function stringify(it, replacer, space) {\n  return apply(path.JSON.stringify, null, arguments);\n};\n", "'use strict';\nvar parent = require('../../es/json/stringify');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/json/stringify\");", "'use strict';\n/* global Bun, Deno -- detection */\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\nvar classof = require('../internals/classof-raw');\n\nvar userAgentStartsWith = function (string) {\n  return userAgent.slice(0, string.length) === string;\n};\n\nmodule.exports = (function () {\n  if (userAgentStartsWith('Bun/')) return 'BUN';\n  if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE';\n  if (userAgentStartsWith('Deno/')) return 'DENO';\n  if (userAgentStartsWith('Node.js/')) return 'NODE';\n  if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN';\n  if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO';\n  if (classof(globalThis.process) === 'process') return 'NODE';\n  if (globalThis.window && globalThis.document) return 'BROWSER';\n  return 'REST';\n})();\n", "'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n  if (passed < required) throw new $TypeError('Not enough arguments');\n  return passed;\n};\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar apply = require('../internals/function-apply');\nvar isCallable = require('../internals/is-callable');\nvar ENVIRONMENT = require('../internals/environment');\nvar USER_AGENT = require('../internals/environment-user-agent');\nvar arraySlice = require('../internals/array-slice');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar Function = globalThis.Function;\n// dirty IE9- and Bun 0.3.0- checks\nvar WRAP = /MSIE .\\./.test(USER_AGENT) || ENVIRONMENT === 'BUN' && (function () {\n  var version = globalThis.Bun.version.split('.');\n  return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');\n})();\n\n// IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n// https://github.com/oven-sh/bun/issues/1633\nmodule.exports = function (scheduler, hasTimeArg) {\n  var firstParamIndex = hasTimeArg ? 2 : 1;\n  return WRAP ? function (handler, timeout /* , ...arguments */) {\n    var boundArgs = validateArgumentsLength(arguments.length, 1) > firstParamIndex;\n    var fn = isCallable(handler) ? handler : Function(handler);\n    var params = boundArgs ? arraySlice(arguments, firstParamIndex) : [];\n    var callback = boundArgs ? function () {\n      apply(fn, this, params);\n    } : fn;\n    return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback);\n  } : scheduler;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar schedulersFix = require('../internals/schedulers-fix');\n\nvar setInterval = schedulersFix(globalThis.setInterval, true);\n\n// Bun / IE9- setInterval additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval\n$({ global: true, bind: true, forced: globalThis.setInterval !== setInterval }, {\n  setInterval: setInterval\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar schedulersFix = require('../internals/schedulers-fix');\n\nvar setTimeout = schedulersFix(globalThis.setTimeout, true);\n\n// Bun / IE9- setTimeout additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout\n$({ global: true, bind: true, forced: globalThis.setTimeout !== setTimeout }, {\n  setTimeout: setTimeout\n});\n", "'use strict';\n// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/web.set-interval');\nrequire('../modules/web.set-timeout');\n", "'use strict';\nrequire('../modules/web.timers');\nvar path = require('../internals/path');\n\nmodule.exports = path.setTimeout;\n", "module.exports = require(\"core-js-pure/stable/set-timeout\");", "'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\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 = lengthOfArrayLike(O);\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", "'use strict';\nvar $ = 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", "'use strict';\nrequire('../../../modules/es.array.fill');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'fill');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/fill');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.fill;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.fill) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/fill');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/fill\");", "\n/**\n * Expose `Emitter`.\n */\n\nif (typeof module !== 'undefined') {\n  module.exports = Emitter;\n}\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n  if (obj) return mixin(obj);\n};\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n  for (var key in Emitter.prototype) {\n    obj[key] = Emitter.prototype[key];\n  }\n  return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n    .push(fn);\n  return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n  function on() {\n    this.off(event, on);\n    fn.apply(this, arguments);\n  }\n\n  on.fn = fn;\n  this.on(event, on);\n  return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n\n  // all\n  if (0 == arguments.length) {\n    this._callbacks = {};\n    return this;\n  }\n\n  // specific event\n  var callbacks = this._callbacks['$' + event];\n  if (!callbacks) return this;\n\n  // remove all handlers\n  if (1 == arguments.length) {\n    delete this._callbacks['$' + event];\n    return this;\n  }\n\n  // remove specific handler\n  var cb;\n  for (var i = 0; i < callbacks.length; i++) {\n    cb = callbacks[i];\n    if (cb === fn || cb.fn === fn) {\n      callbacks.splice(i, 1);\n      break;\n    }\n  }\n\n  // Remove event specific arrays for event types that no\n  // one is subscribed for to avoid memory leak.\n  if (callbacks.length === 0) {\n    delete this._callbacks['$' + event];\n  }\n\n  return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n  this._callbacks = this._callbacks || {};\n\n  var args = new Array(arguments.length - 1)\n    , callbacks = this._callbacks['$' + event];\n\n  for (var i = 1; i < arguments.length; i++) {\n    args[i - 1] = arguments[i];\n  }\n\n  if (callbacks) {\n    callbacks = callbacks.slice(0);\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\n      callbacks[i].apply(this, args);\n    }\n  }\n\n  return this;\n};\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n  this._callbacks = this._callbacks || {};\n  return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n  return !! this.listeners(event).length;\n};\n", "/*! Hammer.JS - v2.0.17-rc - 2019-12-16\n * http://naver.github.io/egjs\n *\n * Forked By Naver egjs\n * Copyright (c) hammerjs\n * Licensed under the MIT license */\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\n\nif (typeof Object.assign !== 'function') {\n  assign = function assign(target) {\n    if (target === undefined || target === null) {\n      throw new TypeError('Cannot convert undefined or null to object');\n    }\n\n    var output = Object(target);\n\n    for (var index = 1; index < arguments.length; index++) {\n      var source = arguments[index];\n\n      if (source !== undefined && source !== null) {\n        for (var nextKey in source) {\n          if (source.hasOwnProperty(nextKey)) {\n            output[nextKey] = source[nextKey];\n          }\n        }\n      }\n    }\n\n    return output;\n  };\n} else {\n  assign = Object.assign;\n}\n\nvar assign$1 = assign;\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = typeof document === \"undefined\" ? {\n  style: {}\n} : document.createElement('div');\nvar TYPE_FUNCTION = 'function';\nvar round = Math.round,\n    abs = Math.abs;\nvar now = Date.now;\n\n/**\n * @private\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\nfunction prefixed(obj, property) {\n  var prefix;\n  var prop;\n  var camelProp = property[0].toUpperCase() + property.slice(1);\n  var i = 0;\n\n  while (i < VENDOR_PREFIXES.length) {\n    prefix = VENDOR_PREFIXES[i];\n    prop = prefix ? prefix + camelProp : property;\n\n    if (prop in obj) {\n      return prop;\n    }\n\n    i++;\n  }\n\n  return undefined;\n}\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \"undefined\") {\n  // window is undefined in node.js\n  win = {};\n} else {\n  win = window;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\nfunction getTouchActionProps() {\n  if (!NATIVE_TOUCH_ACTION) {\n    return false;\n  }\n\n  var touchMap = {};\n  var cssSupports = win.CSS && win.CSS.supports;\n  ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n    // If css.supports is not supported but there is native touch-action assume it supports\n    // all values. This is the case for IE 10 and 11.\n    return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true;\n  });\n  return touchMap;\n}\n\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\nvar SUPPORT_TOUCH = 'ontouchstart' in win;\nvar SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\nvar COMPUTE_INTERVAL = 25;\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * @private\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n  var i;\n\n  if (!obj) {\n    return;\n  }\n\n  if (obj.forEach) {\n    obj.forEach(iterator, context);\n  } else if (obj.length !== undefined) {\n    i = 0;\n\n    while (i < obj.length) {\n      iterator.call(context, obj[i], i, obj);\n      i++;\n    }\n  } else {\n    for (i in obj) {\n      obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n    }\n  }\n}\n\n/**\n * @private\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\nfunction boolOrFn(val, args) {\n  if (typeof val === TYPE_FUNCTION) {\n    return val.apply(args ? args[0] || undefined : undefined, args);\n  }\n\n  return val;\n}\n\n/**\n * @private\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n  return str.indexOf(find) > -1;\n}\n\n/**\n * @private\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\nfunction cleanTouchActions(actions) {\n  // none\n  if (inStr(actions, TOUCH_ACTION_NONE)) {\n    return TOUCH_ACTION_NONE;\n  }\n\n  var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n  var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n  // for different directions, e.g. horizontal pan but vertical swipe?)\n  // we need none (as otherwise with pan-x pan-y combined none of these\n  // recognizers will work, since the browser would handle all panning\n\n  if (hasPanX && hasPanY) {\n    return TOUCH_ACTION_NONE;\n  } // pan-x OR pan-y\n\n\n  if (hasPanX || hasPanY) {\n    return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n  } // manipulation\n\n\n  if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n    return TOUCH_ACTION_MANIPULATION;\n  }\n\n  return TOUCH_ACTION_AUTO;\n}\n\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\nvar TouchAction =\n/*#__PURE__*/\nfunction () {\n  function TouchAction(manager, value) {\n    this.manager = manager;\n    this.set(value);\n  }\n  /**\n   * @private\n   * set the touchAction value on the element or enable the polyfill\n   * @param {String} value\n   */\n\n\n  var _proto = TouchAction.prototype;\n\n  _proto.set = function set(value) {\n    // find out the touch-action by the event handlers\n    if (value === TOUCH_ACTION_COMPUTE) {\n      value = this.compute();\n    }\n\n    if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n      this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n    }\n\n    this.actions = value.toLowerCase().trim();\n  };\n  /**\n   * @private\n   * just re-set the touchAction value\n   */\n\n\n  _proto.update = function update() {\n    this.set(this.manager.options.touchAction);\n  };\n  /**\n   * @private\n   * compute the value for the touchAction property based on the recognizer's settings\n   * @returns {String} value\n   */\n\n\n  _proto.compute = function compute() {\n    var actions = [];\n    each(this.manager.recognizers, function (recognizer) {\n      if (boolOrFn(recognizer.options.enable, [recognizer])) {\n        actions = actions.concat(recognizer.getTouchAction());\n      }\n    });\n    return cleanTouchActions(actions.join(' '));\n  };\n  /**\n   * @private\n   * this method is called on each input cycle and provides the preventing of the browser behavior\n   * @param {Object} input\n   */\n\n\n  _proto.preventDefaults = function preventDefaults(input) {\n    var srcEvent = input.srcEvent;\n    var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n    if (this.manager.session.prevented) {\n      srcEvent.preventDefault();\n      return;\n    }\n\n    var actions = this.actions;\n    var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n    if (hasNone) {\n      // do not prevent defaults if this is a tap gesture\n      var isTapPointer = input.pointers.length === 1;\n      var isTapMovement = input.distance < 2;\n      var isTapTouchTime = input.deltaTime < 250;\n\n      if (isTapPointer && isTapMovement && isTapTouchTime) {\n        return;\n      }\n    }\n\n    if (hasPanX && hasPanY) {\n      // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n      return;\n    }\n\n    if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n      return this.preventSrc(srcEvent);\n    }\n  };\n  /**\n   * @private\n   * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n   * @param {Object} srcEvent\n   */\n\n\n  _proto.preventSrc = function preventSrc(srcEvent) {\n    this.manager.session.prevented = true;\n    srcEvent.preventDefault();\n  };\n\n  return TouchAction;\n}();\n\n/**\n * @private\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n  while (node) {\n    if (node === parent) {\n      return true;\n    }\n\n    node = node.parentNode;\n  }\n\n  return false;\n}\n\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\nfunction getCenter(pointers) {\n  var pointersLength = pointers.length; // no need to loop when only one touch\n\n  if (pointersLength === 1) {\n    return {\n      x: round(pointers[0].clientX),\n      y: round(pointers[0].clientY)\n    };\n  }\n\n  var x = 0;\n  var y = 0;\n  var i = 0;\n\n  while (i < pointersLength) {\n    x += pointers[i].clientX;\n    y += pointers[i].clientY;\n    i++;\n  }\n\n  return {\n    x: round(x / pointersLength),\n    y: round(y / pointersLength)\n  };\n}\n\n/**\n * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\nfunction simpleCloneInputData(input) {\n  // make a simple copy of the pointers because we will get a reference if we don't\n  // we only need clientXY for the calculations\n  var pointers = [];\n  var i = 0;\n\n  while (i < input.pointers.length) {\n    pointers[i] = {\n      clientX: round(input.pointers[i].clientX),\n      clientY: round(input.pointers[i].clientY)\n    };\n    i++;\n  }\n\n  return {\n    timeStamp: now(),\n    pointers: pointers,\n    center: getCenter(pointers),\n    deltaX: input.deltaX,\n    deltaY: input.deltaY\n  };\n}\n\n/**\n * @private\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\nfunction getDistance(p1, p2, props) {\n  if (!props) {\n    props = PROPS_XY;\n  }\n\n  var x = p2[props[0]] - p1[props[0]];\n  var y = p2[props[1]] - p1[props[1]];\n  return Math.sqrt(x * x + y * y);\n}\n\n/**\n * @private\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\nfunction getAngle(p1, p2, props) {\n  if (!props) {\n    props = PROPS_XY;\n  }\n\n  var x = p2[props[0]] - p1[props[0]];\n  var y = p2[props[1]] - p1[props[1]];\n  return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\nfunction getDirection(x, y) {\n  if (x === y) {\n    return DIRECTION_NONE;\n  }\n\n  if (abs(x) >= abs(y)) {\n    return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n  }\n\n  return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\nfunction computeDeltaXY(session, input) {\n  var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n  // jscs throwing error on defalut destructured values and without defaults tests fail\n\n  var offset = session.offsetDelta || {};\n  var prevDelta = session.prevDelta || {};\n  var prevInput = session.prevInput || {};\n\n  if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n    prevDelta = session.prevDelta = {\n      x: prevInput.deltaX || 0,\n      y: prevInput.deltaY || 0\n    };\n    offset = session.offsetDelta = {\n      x: center.x,\n      y: center.y\n    };\n  }\n\n  input.deltaX = prevDelta.x + (center.x - offset.x);\n  input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * @private\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n  return {\n    x: x / deltaTime || 0,\n    y: y / deltaTime || 0\n  };\n}\n\n/**\n * @private\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\nfunction getScale(start, end) {\n  return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\nfunction getRotation(start, end) {\n  return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\nfunction computeIntervalInputData(session, input) {\n  var last = session.lastInterval || input;\n  var deltaTime = input.timeStamp - last.timeStamp;\n  var velocity;\n  var velocityX;\n  var velocityY;\n  var direction;\n\n  if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n    var deltaX = input.deltaX - last.deltaX;\n    var deltaY = input.deltaY - last.deltaY;\n    var v = getVelocity(deltaTime, deltaX, deltaY);\n    velocityX = v.x;\n    velocityY = v.y;\n    velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n    direction = getDirection(deltaX, deltaY);\n    session.lastInterval = input;\n  } else {\n    // use latest velocity info if it doesn't overtake a minimum period\n    velocity = last.velocity;\n    velocityX = last.velocityX;\n    velocityY = last.velocityY;\n    direction = last.direction;\n  }\n\n  input.velocity = velocity;\n  input.velocityX = velocityX;\n  input.velocityY = velocityY;\n  input.direction = direction;\n}\n\n/**\n* @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\nfunction computeInputData(manager, input) {\n  var session = manager.session;\n  var pointers = input.pointers;\n  var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n  if (!session.firstInput) {\n    session.firstInput = simpleCloneInputData(input);\n  } // to compute scale and rotation we need to store the multiple touches\n\n\n  if (pointersLength > 1 && !session.firstMultiple) {\n    session.firstMultiple = simpleCloneInputData(input);\n  } else if (pointersLength === 1) {\n    session.firstMultiple = false;\n  }\n\n  var firstInput = session.firstInput,\n      firstMultiple = session.firstMultiple;\n  var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n  var center = input.center = getCenter(pointers);\n  input.timeStamp = now();\n  input.deltaTime = input.timeStamp - firstInput.timeStamp;\n  input.angle = getAngle(offsetCenter, center);\n  input.distance = getDistance(offsetCenter, center);\n  computeDeltaXY(session, input);\n  input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n  var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n  input.overallVelocityX = overallVelocity.x;\n  input.overallVelocityY = overallVelocity.y;\n  input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n  input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n  input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n  input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n  computeIntervalInputData(session, input); // find the correct target\n\n  var target = manager.element;\n  var srcEvent = input.srcEvent;\n  var srcEventTarget;\n\n  if (srcEvent.composedPath) {\n    srcEventTarget = srcEvent.composedPath()[0];\n  } else if (srcEvent.path) {\n    srcEventTarget = srcEvent.path[0];\n  } else {\n    srcEventTarget = srcEvent.target;\n  }\n\n  if (hasParent(srcEventTarget, target)) {\n    target = srcEventTarget;\n  }\n\n  input.target = target;\n}\n\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\nfunction inputHandler(manager, eventType, input) {\n  var pointersLen = input.pointers.length;\n  var changedPointersLen = input.changedPointers.length;\n  var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n  var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n  input.isFirst = !!isFirst;\n  input.isFinal = !!isFinal;\n\n  if (isFirst) {\n    manager.session = {};\n  } // source event is the normalized value of the domEvents\n  // like 'touchstart, mouseup, pointerdown'\n\n\n  input.eventType = eventType; // compute scale, rotation etc\n\n  computeInputData(manager, input); // emit secret event\n\n  manager.emit('hammer.input', input);\n  manager.recognize(input);\n  manager.session.prevInput = input;\n}\n\n/**\n * @private\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n  return str.trim().split(/\\s+/g);\n}\n\n/**\n * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction addEventListeners(target, types, handler) {\n  each(splitStr(types), function (type) {\n    target.addEventListener(type, handler, false);\n  });\n}\n\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction removeEventListeners(target, types, handler) {\n  each(splitStr(types), function (type) {\n    target.removeEventListener(type, handler, false);\n  });\n}\n\n/**\n * @private\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n  var doc = element.ownerDocument || element;\n  return doc.defaultView || doc.parentWindow || window;\n}\n\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\nvar Input =\n/*#__PURE__*/\nfunction () {\n  function Input(manager, callback) {\n    var self = this;\n    this.manager = manager;\n    this.callback = callback;\n    this.element = manager.element;\n    this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n    // so when disabled the input events are completely bypassed.\n\n    this.domHandler = function (ev) {\n      if (boolOrFn(manager.options.enable, [manager])) {\n        self.handler(ev);\n      }\n    };\n\n    this.init();\n  }\n  /**\n   * @private\n   * should handle the inputEvent data and trigger the callback\n   * @virtual\n   */\n\n\n  var _proto = Input.prototype;\n\n  _proto.handler = function handler() {};\n  /**\n   * @private\n   * bind the events\n   */\n\n\n  _proto.init = function init() {\n    this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n    this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n    this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n  };\n  /**\n   * @private\n   * unbind the events\n   */\n\n\n  _proto.destroy = function destroy() {\n    this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n    this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n    this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n  };\n\n  return Input;\n}();\n\n/**\n * @private\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n  if (src.indexOf && !findByKey) {\n    return src.indexOf(find);\n  } else {\n    var i = 0;\n\n    while (i < src.length) {\n      if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n        // do not use === here, test fails\n        return i;\n      }\n\n      i++;\n    }\n\n    return -1;\n  }\n}\n\nvar POINTER_INPUT_MAP = {\n  pointerdown: INPUT_START,\n  pointermove: INPUT_MOVE,\n  pointerup: INPUT_END,\n  pointercancel: INPUT_CANCEL,\n  pointerout: INPUT_CANCEL\n}; // in IE10 the pointer types is defined as an enum\n\nvar IE10_POINTER_TYPE_ENUM = {\n  2: INPUT_TYPE_TOUCH,\n  3: INPUT_TYPE_PEN,\n  4: INPUT_TYPE_MOUSE,\n  5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n};\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\nif (win.MSPointerEvent && !win.PointerEvent) {\n  POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n  POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\nvar PointerEventInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(PointerEventInput, _Input);\n\n  function PointerEventInput() {\n    var _this;\n\n    var proto = PointerEventInput.prototype;\n    proto.evEl = POINTER_ELEMENT_EVENTS;\n    proto.evWin = POINTER_WINDOW_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.store = _this.manager.session.pointerEvents = [];\n    return _this;\n  }\n  /**\n   * @private\n   * handle mouse events\n   * @param {Object} ev\n   */\n\n\n  var _proto = PointerEventInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var store = this.store;\n    var removePointer = false;\n    var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n    var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n    var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n    var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store\n\n    var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n    if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n      if (storeIndex < 0) {\n        store.push(ev);\n        storeIndex = store.length - 1;\n      }\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n      removePointer = true;\n    } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n    if (storeIndex < 0) {\n      return;\n    } // update the event in the store\n\n\n    store[storeIndex] = ev;\n    this.callback(this.manager, eventType, {\n      pointers: store,\n      changedPointers: [ev],\n      pointerType: pointerType,\n      srcEvent: ev\n    });\n\n    if (removePointer) {\n      // remove from the store\n      store.splice(storeIndex, 1);\n    }\n  };\n\n  return PointerEventInput;\n}(Input);\n\n/**\n * @private\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n  return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * @private\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\nfunction uniqueArray(src, key, sort) {\n  var results = [];\n  var values = [];\n  var i = 0;\n\n  while (i < src.length) {\n    var val = key ? src[i][key] : src[i];\n\n    if (inArray(values, val) < 0) {\n      results.push(src[i]);\n    }\n\n    values[i] = val;\n    i++;\n  }\n\n  if (sort) {\n    if (!key) {\n      results = results.sort();\n    } else {\n      results = results.sort(function (a, b) {\n        return a[key] > b[key];\n      });\n    }\n  }\n\n  return results;\n}\n\nvar TOUCH_INPUT_MAP = {\n  touchstart: INPUT_START,\n  touchmove: INPUT_MOVE,\n  touchend: INPUT_END,\n  touchcancel: INPUT_CANCEL\n};\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\nvar TouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(TouchInput, _Input);\n\n  function TouchInput() {\n    var _this;\n\n    TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS;\n\n    return _this;\n  }\n\n  var _proto = TouchInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var type = TOUCH_INPUT_MAP[ev.type];\n    var touches = getTouches.call(this, ev, type);\n\n    if (!touches) {\n      return;\n    }\n\n    this.callback(this.manager, type, {\n      pointers: touches[0],\n      changedPointers: touches[1],\n      pointerType: INPUT_TYPE_TOUCH,\n      srcEvent: ev\n    });\n  };\n\n  return TouchInput;\n}(Input);\n\nfunction getTouches(ev, type) {\n  var allTouches = toArray(ev.touches);\n  var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n  if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n    targetIds[allTouches[0].identifier] = true;\n    return [allTouches, allTouches];\n  }\n\n  var i;\n  var targetTouches;\n  var changedTouches = toArray(ev.changedTouches);\n  var changedTargetTouches = [];\n  var target = this.target; // get target touches from touches\n\n  targetTouches = allTouches.filter(function (touch) {\n    return hasParent(touch.target, target);\n  }); // collect touches\n\n  if (type === INPUT_START) {\n    i = 0;\n\n    while (i < targetTouches.length) {\n      targetIds[targetTouches[i].identifier] = true;\n      i++;\n    }\n  } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n  i = 0;\n\n  while (i < changedTouches.length) {\n    if (targetIds[changedTouches[i].identifier]) {\n      changedTargetTouches.push(changedTouches[i]);\n    } // cleanup removed touches\n\n\n    if (type & (INPUT_END | INPUT_CANCEL)) {\n      delete targetIds[changedTouches[i].identifier];\n    }\n\n    i++;\n  }\n\n  if (!changedTargetTouches.length) {\n    return;\n  }\n\n  return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n  uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n}\n\nvar MOUSE_INPUT_MAP = {\n  mousedown: INPUT_START,\n  mousemove: INPUT_MOVE,\n  mouseup: INPUT_END\n};\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n/**\n * @private\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\nvar MouseInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(MouseInput, _Input);\n\n  function MouseInput() {\n    var _this;\n\n    var proto = MouseInput.prototype;\n    proto.evEl = MOUSE_ELEMENT_EVENTS;\n    proto.evWin = MOUSE_WINDOW_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.pressed = false; // mousedown state\n\n    return _this;\n  }\n  /**\n   * @private\n   * handle mouse events\n   * @param {Object} ev\n   */\n\n\n  var _proto = MouseInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n    if (eventType & INPUT_START && ev.button === 0) {\n      this.pressed = true;\n    }\n\n    if (eventType & INPUT_MOVE && ev.which !== 1) {\n      eventType = INPUT_END;\n    } // mouse must be down\n\n\n    if (!this.pressed) {\n      return;\n    }\n\n    if (eventType & INPUT_END) {\n      this.pressed = false;\n    }\n\n    this.callback(this.manager, eventType, {\n      pointers: [ev],\n      changedPointers: [ev],\n      pointerType: INPUT_TYPE_MOUSE,\n      srcEvent: ev\n    });\n  };\n\n  return MouseInput;\n}(Input);\n\n/**\n * @private\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction setLastTouch(eventData) {\n  var _eventData$changedPoi = eventData.changedPointers,\n      touch = _eventData$changedPoi[0];\n\n  if (touch.identifier === this.primaryTouch) {\n    var lastTouch = {\n      x: touch.clientX,\n      y: touch.clientY\n    };\n    var lts = this.lastTouches;\n    this.lastTouches.push(lastTouch);\n\n    var removeLastTouch = function removeLastTouch() {\n      var i = lts.indexOf(lastTouch);\n\n      if (i > -1) {\n        lts.splice(i, 1);\n      }\n    };\n\n    setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n  }\n}\n\nfunction recordTouches(eventType, eventData) {\n  if (eventType & INPUT_START) {\n    this.primaryTouch = eventData.changedPointers[0].identifier;\n    setLastTouch.call(this, eventData);\n  } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n    setLastTouch.call(this, eventData);\n  }\n}\n\nfunction isSyntheticEvent(eventData) {\n  var x = eventData.srcEvent.clientX;\n  var y = eventData.srcEvent.clientY;\n\n  for (var i = 0; i < this.lastTouches.length; i++) {\n    var t = this.lastTouches[i];\n    var dx = Math.abs(x - t.x);\n    var dy = Math.abs(y - t.y);\n\n    if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nvar TouchMouseInput =\n/*#__PURE__*/\nfunction () {\n  var TouchMouseInput =\n  /*#__PURE__*/\n  function (_Input) {\n    _inheritsLoose(TouchMouseInput, _Input);\n\n    function TouchMouseInput(_manager, callback) {\n      var _this;\n\n      _this = _Input.call(this, _manager, callback) || this;\n\n      _this.handler = function (manager, inputEvent, inputData) {\n        var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH;\n        var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE;\n\n        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n          return;\n        } // when we're in a touch event, record touches to  de-dupe synthetic mouse event\n\n\n        if (isTouch) {\n          recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData);\n        } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) {\n          return;\n        }\n\n        _this.callback(manager, inputEvent, inputData);\n      };\n\n      _this.touch = new TouchInput(_this.manager, _this.handler);\n      _this.mouse = new MouseInput(_this.manager, _this.handler);\n      _this.primaryTouch = null;\n      _this.lastTouches = [];\n      return _this;\n    }\n    /**\n     * @private\n     * handle mouse and touch events\n     * @param {Hammer} manager\n     * @param {String} inputEvent\n     * @param {Object} inputData\n     */\n\n\n    var _proto = TouchMouseInput.prototype;\n\n    /**\n     * @private\n     * remove the event listeners\n     */\n    _proto.destroy = function destroy() {\n      this.touch.destroy();\n      this.mouse.destroy();\n    };\n\n    return TouchMouseInput;\n  }(Input);\n\n  return TouchMouseInput;\n}();\n\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\nfunction createInputInstance(manager) {\n  var Type; // let inputClass = manager.options.inputClass;\n\n  var inputClass = manager.options.inputClass;\n\n  if (inputClass) {\n    Type = inputClass;\n  } else if (SUPPORT_POINTER_EVENTS) {\n    Type = PointerEventInput;\n  } else if (SUPPORT_ONLY_TOUCH) {\n    Type = TouchInput;\n  } else if (!SUPPORT_TOUCH) {\n    Type = MouseInput;\n  } else {\n    Type = TouchMouseInput;\n  }\n\n  return new Type(manager, inputHandler);\n}\n\n/**\n * @private\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\nfunction invokeArrayArg(arg, fn, context) {\n  if (Array.isArray(arg)) {\n    each(arg, context[fn], context);\n    return true;\n  }\n\n  return false;\n}\n\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * @private\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n  return _uniqueId++;\n}\n\n/**\n * @private\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n  var manager = recognizer.manager;\n\n  if (manager) {\n    return manager.get(otherRecognizer);\n  }\n\n  return otherRecognizer;\n}\n\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\n\nfunction stateStr(state) {\n  if (state & STATE_CANCELLED) {\n    return 'cancel';\n  } else if (state & STATE_ENDED) {\n    return 'end';\n  } else if (state & STATE_CHANGED) {\n    return 'move';\n  } else if (state & STATE_BEGAN) {\n    return 'start';\n  }\n\n  return '';\n}\n\n/**\n * @private\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n *               Possible\n *                  |\n *            +-----+---------------+\n *            |                     |\n *      +-----+-----+               |\n *      |           |               |\n *   Failed      Cancelled          |\n *                          +-------+------+\n *                          |              |\n *                      Recognized       Began\n *                                         |\n *                                      Changed\n *                                         |\n *                                  Ended/Recognized\n */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\nvar Recognizer =\n/*#__PURE__*/\nfunction () {\n  function Recognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    this.options = _extends({\n      enable: true\n    }, options);\n    this.id = uniqueId();\n    this.manager = null; // default is enable true\n\n    this.state = STATE_POSSIBLE;\n    this.simultaneous = {};\n    this.requireFail = [];\n  }\n  /**\n   * @private\n   * set options\n   * @param {Object} options\n   * @return {Recognizer}\n   */\n\n\n  var _proto = Recognizer.prototype;\n\n  _proto.set = function set(options) {\n    assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n    this.manager && this.manager.touchAction.update();\n    return this;\n  };\n  /**\n   * @private\n   * recognize simultaneous with an other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.recognizeWith = function recognizeWith(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n      return this;\n    }\n\n    var simultaneous = this.simultaneous;\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n    if (!simultaneous[otherRecognizer.id]) {\n      simultaneous[otherRecognizer.id] = otherRecognizer;\n      otherRecognizer.recognizeWith(this);\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.dropRecognizeWith = function dropRecognizeWith(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n      return this;\n    }\n\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n    delete this.simultaneous[otherRecognizer.id];\n    return this;\n  };\n  /**\n   * @private\n   * recognizer can only run when an other is failing\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.requireFailure = function requireFailure(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n      return this;\n    }\n\n    var requireFail = this.requireFail;\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n    if (inArray(requireFail, otherRecognizer) === -1) {\n      requireFail.push(otherRecognizer);\n      otherRecognizer.requireFailure(this);\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * drop the requireFailure link. it does not remove the link on the other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.dropRequireFailure = function dropRequireFailure(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n      return this;\n    }\n\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n    var index = inArray(this.requireFail, otherRecognizer);\n\n    if (index > -1) {\n      this.requireFail.splice(index, 1);\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * has require failures boolean\n   * @returns {boolean}\n   */\n\n\n  _proto.hasRequireFailures = function hasRequireFailures() {\n    return this.requireFail.length > 0;\n  };\n  /**\n   * @private\n   * if the recognizer can recognize simultaneous with an other recognizer\n   * @param {Recognizer} otherRecognizer\n   * @returns {Boolean}\n   */\n\n\n  _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) {\n    return !!this.simultaneous[otherRecognizer.id];\n  };\n  /**\n   * @private\n   * You should use `tryEmit` instead of `emit` directly to check\n   * that all the needed recognizers has failed before emitting.\n   * @param {Object} input\n   */\n\n\n  _proto.emit = function emit(input) {\n    var self = this;\n    var state = this.state;\n\n    function emit(event) {\n      self.manager.emit(event, input);\n    } // 'panstart' and 'panmove'\n\n\n    if (state < STATE_ENDED) {\n      emit(self.options.event + stateStr(state));\n    }\n\n    emit(self.options.event); // simple 'eventName' events\n\n    if (input.additionalEvent) {\n      // additional event(panleft, panright, pinchin, pinchout...)\n      emit(input.additionalEvent);\n    } // panend and pancancel\n\n\n    if (state >= STATE_ENDED) {\n      emit(self.options.event + stateStr(state));\n    }\n  };\n  /**\n   * @private\n   * Check that all the require failure recognizers has failed,\n   * if true, it emits a gesture event,\n   * otherwise, setup the state to FAILED.\n   * @param {Object} input\n   */\n\n\n  _proto.tryEmit = function tryEmit(input) {\n    if (this.canEmit()) {\n      return this.emit(input);\n    } // it's failing anyway\n\n\n    this.state = STATE_FAILED;\n  };\n  /**\n   * @private\n   * can we emit?\n   * @returns {boolean}\n   */\n\n\n  _proto.canEmit = function canEmit() {\n    var i = 0;\n\n    while (i < this.requireFail.length) {\n      if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n        return false;\n      }\n\n      i++;\n    }\n\n    return true;\n  };\n  /**\n   * @private\n   * update the recognizer\n   * @param {Object} inputData\n   */\n\n\n  _proto.recognize = function recognize(inputData) {\n    // make a new copy of the inputData\n    // so we can change the inputData without messing up the other recognizers\n    var inputDataClone = assign$1({}, inputData); // is is enabled and allow recognizing?\n\n    if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n      this.reset();\n      this.state = STATE_FAILED;\n      return;\n    } // reset when we've reached the end\n\n\n    if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n      this.state = STATE_POSSIBLE;\n    }\n\n    this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n    // so trigger an event\n\n    if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n      this.tryEmit(inputDataClone);\n    }\n  };\n  /**\n   * @private\n   * return the state of the recognizer\n   * the actual recognizing happens in this method\n   * @virtual\n   * @param {Object} inputData\n   * @returns {constant} STATE\n   */\n\n  /* jshint ignore:start */\n\n\n  _proto.process = function process(inputData) {};\n  /* jshint ignore:end */\n\n  /**\n   * @private\n   * return the preferred touch-action\n   * @virtual\n   * @returns {Array}\n   */\n\n\n  _proto.getTouchAction = function getTouchAction() {};\n  /**\n   * @private\n   * called when the gesture isn't allowed to recognize\n   * like when another is being recognized or it is disabled\n   * @virtual\n   */\n\n\n  _proto.reset = function reset() {};\n\n  return Recognizer;\n}();\n\n/**\n * @private\n * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\nvar TapRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n  _inheritsLoose(TapRecognizer, _Recognizer);\n\n  function TapRecognizer(options) {\n    var _this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    _this = _Recognizer.call(this, _extends({\n      event: 'tap',\n      pointers: 1,\n      taps: 1,\n      interval: 300,\n      // max time between the multi-tap taps\n      time: 250,\n      // max time of the pointer to be down (like finger on the screen)\n      threshold: 9,\n      // a minimal movement is ok, but keep it low\n      posThreshold: 10\n    }, options)) || this; // previous time and center,\n    // used for tap counting\n\n    _this.pTime = false;\n    _this.pCenter = false;\n    _this._timer = null;\n    _this._input = null;\n    _this.count = 0;\n    return _this;\n  }\n\n  var _proto = TapRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_MANIPULATION];\n  };\n\n  _proto.process = function process(input) {\n    var _this2 = this;\n\n    var options = this.options;\n    var validPointers = input.pointers.length === options.pointers;\n    var validMovement = input.distance < options.threshold;\n    var validTouchTime = input.deltaTime < options.time;\n    this.reset();\n\n    if (input.eventType & INPUT_START && this.count === 0) {\n      return this.failTimeout();\n    } // we only allow little movement\n    // and we've reached an end event, so a tap is possible\n\n\n    if (validMovement && validTouchTime && validPointers) {\n      if (input.eventType !== INPUT_END) {\n        return this.failTimeout();\n      }\n\n      var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n      var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n      this.pTime = input.timeStamp;\n      this.pCenter = input.center;\n\n      if (!validMultiTap || !validInterval) {\n        this.count = 1;\n      } else {\n        this.count += 1;\n      }\n\n      this._input = input; // if tap count matches we have recognized it,\n      // else it has began recognizing...\n\n      var tapCount = this.count % options.taps;\n\n      if (tapCount === 0) {\n        // no failing requirements, immediately trigger the tap event\n        // or wait as long as the multitap interval to trigger\n        if (!this.hasRequireFailures()) {\n          return STATE_RECOGNIZED;\n        } else {\n          this._timer = setTimeout(function () {\n            _this2.state = STATE_RECOGNIZED;\n\n            _this2.tryEmit();\n          }, options.interval);\n          return STATE_BEGAN;\n        }\n      }\n    }\n\n    return STATE_FAILED;\n  };\n\n  _proto.failTimeout = function failTimeout() {\n    var _this3 = this;\n\n    this._timer = setTimeout(function () {\n      _this3.state = STATE_FAILED;\n    }, this.options.interval);\n    return STATE_FAILED;\n  };\n\n  _proto.reset = function reset() {\n    clearTimeout(this._timer);\n  };\n\n  _proto.emit = function emit() {\n    if (this.state === STATE_RECOGNIZED) {\n      this._input.tapCount = this.count;\n      this.manager.emit(this.options.event, this._input);\n    }\n  };\n\n  return TapRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\nvar AttrRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n  _inheritsLoose(AttrRecognizer, _Recognizer);\n\n  function AttrRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _Recognizer.call(this, _extends({\n      pointers: 1\n    }, options)) || this;\n  }\n  /**\n   * @private\n   * Used to check if it the recognizer receives valid input, like input.distance > 10.\n   * @memberof AttrRecognizer\n   * @param {Object} input\n   * @returns {Boolean} recognized\n   */\n\n\n  var _proto = AttrRecognizer.prototype;\n\n  _proto.attrTest = function attrTest(input) {\n    var optionPointers = this.options.pointers;\n    return optionPointers === 0 || input.pointers.length === optionPointers;\n  };\n  /**\n   * @private\n   * Process the input and return the state for the recognizer\n   * @memberof AttrRecognizer\n   * @param {Object} input\n   * @returns {*} State\n   */\n\n\n  _proto.process = function process(input) {\n    var state = this.state;\n    var eventType = input.eventType;\n    var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n    var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n    if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n      return state | STATE_CANCELLED;\n    } else if (isRecognized || isValid) {\n      if (eventType & INPUT_END) {\n        return state | STATE_ENDED;\n      } else if (!(state & STATE_BEGAN)) {\n        return STATE_BEGAN;\n      }\n\n      return state | STATE_CHANGED;\n    }\n\n    return STATE_FAILED;\n  };\n\n  return AttrRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\n\nfunction directionStr(direction) {\n  if (direction === DIRECTION_DOWN) {\n    return 'down';\n  } else if (direction === DIRECTION_UP) {\n    return 'up';\n  } else if (direction === DIRECTION_LEFT) {\n    return 'left';\n  } else if (direction === DIRECTION_RIGHT) {\n    return 'right';\n  }\n\n  return '';\n}\n\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PanRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(PanRecognizer, _AttrRecognizer);\n\n  function PanRecognizer(options) {\n    var _this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    _this = _AttrRecognizer.call(this, _extends({\n      event: 'pan',\n      threshold: 10,\n      pointers: 1,\n      direction: DIRECTION_ALL\n    }, options)) || this;\n    _this.pX = null;\n    _this.pY = null;\n    return _this;\n  }\n\n  var _proto = PanRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    var direction = this.options.direction;\n    var actions = [];\n\n    if (direction & DIRECTION_HORIZONTAL) {\n      actions.push(TOUCH_ACTION_PAN_Y);\n    }\n\n    if (direction & DIRECTION_VERTICAL) {\n      actions.push(TOUCH_ACTION_PAN_X);\n    }\n\n    return actions;\n  };\n\n  _proto.directionTest = function directionTest(input) {\n    var options = this.options;\n    var hasMoved = true;\n    var distance = input.distance;\n    var direction = input.direction;\n    var x = input.deltaX;\n    var y = input.deltaY; // lock to axis?\n\n    if (!(direction & options.direction)) {\n      if (options.direction & DIRECTION_HORIZONTAL) {\n        direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n        hasMoved = x !== this.pX;\n        distance = Math.abs(input.deltaX);\n      } else {\n        direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n        hasMoved = y !== this.pY;\n        distance = Math.abs(input.deltaY);\n      }\n    }\n\n    input.direction = direction;\n    return hasMoved && distance > options.threshold && direction & options.direction;\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call\n    this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n  };\n\n  _proto.emit = function emit(input) {\n    this.pX = input.deltaX;\n    this.pY = input.deltaY;\n    var direction = directionStr(input.direction);\n\n    if (direction) {\n      input.additionalEvent = this.options.event + direction;\n    }\n\n    _AttrRecognizer.prototype.emit.call(this, input);\n  };\n\n  return PanRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar SwipeRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(SwipeRecognizer, _AttrRecognizer);\n\n  function SwipeRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _AttrRecognizer.call(this, _extends({\n      event: 'swipe',\n      threshold: 10,\n      velocity: 0.3,\n      direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n      pointers: 1\n    }, options)) || this;\n  }\n\n  var _proto = SwipeRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return PanRecognizer.prototype.getTouchAction.call(this);\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    var direction = this.options.direction;\n    var velocity;\n\n    if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n      velocity = input.overallVelocity;\n    } else if (direction & DIRECTION_HORIZONTAL) {\n      velocity = input.overallVelocityX;\n    } else if (direction & DIRECTION_VERTICAL) {\n      velocity = input.overallVelocityY;\n    }\n\n    return _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n  };\n\n  _proto.emit = function emit(input) {\n    var direction = directionStr(input.offsetDirection);\n\n    if (direction) {\n      this.manager.emit(this.options.event + direction, input);\n    }\n\n    this.manager.emit(this.options.event, input);\n  };\n\n  return SwipeRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PinchRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(PinchRecognizer, _AttrRecognizer);\n\n  function PinchRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _AttrRecognizer.call(this, _extends({\n      event: 'pinch',\n      threshold: 0,\n      pointers: 2\n    }, options)) || this;\n  }\n\n  var _proto = PinchRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_NONE];\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n  };\n\n  _proto.emit = function emit(input) {\n    if (input.scale !== 1) {\n      var inOut = input.scale < 1 ? 'in' : 'out';\n      input.additionalEvent = this.options.event + inOut;\n    }\n\n    _AttrRecognizer.prototype.emit.call(this, input);\n  };\n\n  return PinchRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar RotateRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(RotateRecognizer, _AttrRecognizer);\n\n  function RotateRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _AttrRecognizer.call(this, _extends({\n      event: 'rotate',\n      threshold: 0,\n      pointers: 2\n    }, options)) || this;\n  }\n\n  var _proto = RotateRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_NONE];\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n  };\n\n  return RotateRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\nvar PressRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n  _inheritsLoose(PressRecognizer, _Recognizer);\n\n  function PressRecognizer(options) {\n    var _this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    _this = _Recognizer.call(this, _extends({\n      event: 'press',\n      pointers: 1,\n      time: 251,\n      // minimal time of the pointer to be pressed\n      threshold: 9\n    }, options)) || this;\n    _this._timer = null;\n    _this._input = null;\n    return _this;\n  }\n\n  var _proto = PressRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_AUTO];\n  };\n\n  _proto.process = function process(input) {\n    var _this2 = this;\n\n    var options = this.options;\n    var validPointers = input.pointers.length === options.pointers;\n    var validMovement = input.distance < options.threshold;\n    var validTime = input.deltaTime > options.time;\n    this._input = input; // we only allow little movement\n    // and we've reached an end event, so a tap is possible\n\n    if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n      this.reset();\n    } else if (input.eventType & INPUT_START) {\n      this.reset();\n      this._timer = setTimeout(function () {\n        _this2.state = STATE_RECOGNIZED;\n\n        _this2.tryEmit();\n      }, options.time);\n    } else if (input.eventType & INPUT_END) {\n      return STATE_RECOGNIZED;\n    }\n\n    return STATE_FAILED;\n  };\n\n  _proto.reset = function reset() {\n    clearTimeout(this._timer);\n  };\n\n  _proto.emit = function emit(input) {\n    if (this.state !== STATE_RECOGNIZED) {\n      return;\n    }\n\n    if (input && input.eventType & INPUT_END) {\n      this.manager.emit(this.options.event + \"up\", input);\n    } else {\n      this._input.timeStamp = now();\n      this.manager.emit(this.options.event, this._input);\n    }\n  };\n\n  return PressRecognizer;\n}(Recognizer);\n\nvar defaults = {\n  /**\n   * @private\n   * set if DOM events are being triggered.\n   * But this is slower and unused by simple implementations, so disabled by default.\n   * @type {Boolean}\n   * @default false\n   */\n  domEvents: false,\n\n  /**\n   * @private\n   * The value for the touchAction property/fallback.\n   * When set to `compute` it will magically set the correct value based on the added recognizers.\n   * @type {String}\n   * @default compute\n   */\n  touchAction: TOUCH_ACTION_COMPUTE,\n\n  /**\n   * @private\n   * @type {Boolean}\n   * @default true\n   */\n  enable: true,\n\n  /**\n   * @private\n   * EXPERIMENTAL FEATURE -- can be removed/changed\n   * Change the parent input target element.\n   * If Null, then it is being set the to main element.\n   * @type {Null|EventTarget}\n   * @default null\n   */\n  inputTarget: null,\n\n  /**\n   * @private\n   * force an input class\n   * @type {Null|Function}\n   * @default null\n   */\n  inputClass: null,\n\n  /**\n   * @private\n   * Some CSS properties can be used to improve the working of Hammer.\n   * Add them to this method and they will be set when creating a new Manager.\n   * @namespace\n   */\n  cssProps: {\n    /**\n     * @private\n     * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n     * @type {String}\n     * @default 'none'\n     */\n    userSelect: \"none\",\n\n    /**\n     * @private\n     * Disable the Windows Phone grippers when pressing an element.\n     * @type {String}\n     * @default 'none'\n     */\n    touchSelect: \"none\",\n\n    /**\n     * @private\n     * Disables the default callout shown when you touch and hold a touch target.\n     * On iOS, when you touch and hold a touch target such as a link, Safari displays\n     * a callout containing information about the link. This property allows you to disable that callout.\n     * @type {String}\n     * @default 'none'\n     */\n    touchCallout: \"none\",\n\n    /**\n     * @private\n     * Specifies whether zooming is enabled. Used by IE10>\n     * @type {String}\n     * @default 'none'\n     */\n    contentZooming: \"none\",\n\n    /**\n     * @private\n     * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n     * @type {String}\n     * @default 'none'\n     */\n    userDrag: \"none\",\n\n    /**\n     * @private\n     * Overrides the highlight color shown when the user taps a link or a JavaScript\n     * clickable element in iOS. This property obeys the alpha value, if specified.\n     * @type {String}\n     * @default 'rgba(0,0,0,0)'\n     */\n    tapHighlightColor: \"rgba(0,0,0,0)\"\n  }\n};\n/**\n * @private\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * This is separated with other defaults because of tree-shaking.\n * @type {Array}\n */\n\nvar preset = [[RotateRecognizer, {\n  enable: false\n}], [PinchRecognizer, {\n  enable: false\n}, ['rotate']], [SwipeRecognizer, {\n  direction: DIRECTION_HORIZONTAL\n}], [PanRecognizer, {\n  direction: DIRECTION_HORIZONTAL\n}, ['swipe']], [TapRecognizer], [TapRecognizer, {\n  event: 'doubletap',\n  taps: 2\n}, ['tap']], [PressRecognizer]];\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n/**\n * @private\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\nfunction toggleCssProps(manager, add) {\n  var element = manager.element;\n\n  if (!element.style) {\n    return;\n  }\n\n  var prop;\n  each(manager.options.cssProps, function (value, name) {\n    prop = prefixed(element.style, name);\n\n    if (add) {\n      manager.oldCssProps[prop] = element.style[prop];\n      element.style[prop] = value;\n    } else {\n      element.style[prop] = manager.oldCssProps[prop] || \"\";\n    }\n  });\n\n  if (!add) {\n    manager.oldCssProps = {};\n  }\n}\n/**\n * @private\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\nfunction triggerDomEvent(event, data) {\n  var gestureEvent = document.createEvent(\"Event\");\n  gestureEvent.initEvent(event, true, true);\n  gestureEvent.gesture = data;\n  data.target.dispatchEvent(gestureEvent);\n}\n/**\n* @private\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Manager =\n/*#__PURE__*/\nfunction () {\n  function Manager(element, options) {\n    var _this = this;\n\n    this.options = assign$1({}, defaults, options || {});\n    this.options.inputTarget = this.options.inputTarget || element;\n    this.handlers = {};\n    this.session = {};\n    this.recognizers = [];\n    this.oldCssProps = {};\n    this.element = element;\n    this.input = createInputInstance(this);\n    this.touchAction = new TouchAction(this, this.options.touchAction);\n    toggleCssProps(this, true);\n    each(this.options.recognizers, function (item) {\n      var recognizer = _this.add(new item[0](item[1]));\n\n      item[2] && recognizer.recognizeWith(item[2]);\n      item[3] && recognizer.requireFailure(item[3]);\n    }, this);\n  }\n  /**\n   * @private\n   * set options\n   * @param {Object} options\n   * @returns {Manager}\n   */\n\n\n  var _proto = Manager.prototype;\n\n  _proto.set = function set(options) {\n    assign$1(this.options, options); // Options that need a little more setup\n\n    if (options.touchAction) {\n      this.touchAction.update();\n    }\n\n    if (options.inputTarget) {\n      // Clean up existing event listeners and reinitialize\n      this.input.destroy();\n      this.input.target = options.inputTarget;\n      this.input.init();\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * stop recognizing for this session.\n   * This session will be discarded, when a new [input]start event is fired.\n   * When forced, the recognizer cycle is stopped immediately.\n   * @param {Boolean} [force]\n   */\n\n\n  _proto.stop = function stop(force) {\n    this.session.stopped = force ? FORCED_STOP : STOP;\n  };\n  /**\n   * @private\n   * run the recognizers!\n   * called by the inputHandler function on every movement of the pointers (touches)\n   * it walks through all the recognizers and tries to detect the gesture that is being made\n   * @param {Object} inputData\n   */\n\n\n  _proto.recognize = function recognize(inputData) {\n    var session = this.session;\n\n    if (session.stopped) {\n      return;\n    } // run the touch-action polyfill\n\n\n    this.touchAction.preventDefaults(inputData);\n    var recognizer;\n    var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n    // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n    // if no recognizer is detecting a thing, it is set to `null`\n\n    var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n    // or when we're in a new session\n\n    if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n      session.curRecognizer = null;\n      curRecognizer = null;\n    }\n\n    var i = 0;\n\n    while (i < recognizers.length) {\n      recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n      // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n      // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n      //      that is being recognized.\n      // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n      //      this can be setup with the `recognizeWith()` method on the recognizer.\n\n      if (session.stopped !== FORCED_STOP && ( // 1\n      !curRecognizer || recognizer === curRecognizer || // 2\n      recognizer.canRecognizeWith(curRecognizer))) {\n        // 3\n        recognizer.recognize(inputData);\n      } else {\n        recognizer.reset();\n      } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n      // current active recognizer. but only if we don't already have an active recognizer\n\n\n      if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n        session.curRecognizer = recognizer;\n        curRecognizer = recognizer;\n      }\n\n      i++;\n    }\n  };\n  /**\n   * @private\n   * get a recognizer by its event name.\n   * @param {Recognizer|String} recognizer\n   * @returns {Recognizer|Null}\n   */\n\n\n  _proto.get = function get(recognizer) {\n    if (recognizer instanceof Recognizer) {\n      return recognizer;\n    }\n\n    var recognizers = this.recognizers;\n\n    for (var i = 0; i < recognizers.length; i++) {\n      if (recognizers[i].options.event === recognizer) {\n        return recognizers[i];\n      }\n    }\n\n    return null;\n  };\n  /**\n   * @private add a recognizer to the manager\n   * existing recognizers with the same event name will be removed\n   * @param {Recognizer} recognizer\n   * @returns {Recognizer|Manager}\n   */\n\n\n  _proto.add = function add(recognizer) {\n    if (invokeArrayArg(recognizer, \"add\", this)) {\n      return this;\n    } // remove existing\n\n\n    var existing = this.get(recognizer.options.event);\n\n    if (existing) {\n      this.remove(existing);\n    }\n\n    this.recognizers.push(recognizer);\n    recognizer.manager = this;\n    this.touchAction.update();\n    return recognizer;\n  };\n  /**\n   * @private\n   * remove a recognizer by name or instance\n   * @param {Recognizer|String} recognizer\n   * @returns {Manager}\n   */\n\n\n  _proto.remove = function remove(recognizer) {\n    if (invokeArrayArg(recognizer, \"remove\", this)) {\n      return this;\n    }\n\n    var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n    if (recognizer) {\n      var recognizers = this.recognizers;\n      var index = inArray(recognizers, targetRecognizer);\n\n      if (index !== -1) {\n        recognizers.splice(index, 1);\n        this.touchAction.update();\n      }\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * bind event\n   * @param {String} events\n   * @param {Function} handler\n   * @returns {EventEmitter} this\n   */\n\n\n  _proto.on = function on(events, handler) {\n    if (events === undefined || handler === undefined) {\n      return this;\n    }\n\n    var handlers = this.handlers;\n    each(splitStr(events), function (event) {\n      handlers[event] = handlers[event] || [];\n      handlers[event].push(handler);\n    });\n    return this;\n  };\n  /**\n   * @private unbind event, leave emit blank to remove all handlers\n   * @param {String} events\n   * @param {Function} [handler]\n   * @returns {EventEmitter} this\n   */\n\n\n  _proto.off = function off(events, handler) {\n    if (events === undefined) {\n      return this;\n    }\n\n    var handlers = this.handlers;\n    each(splitStr(events), function (event) {\n      if (!handler) {\n        delete handlers[event];\n      } else {\n        handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n      }\n    });\n    return this;\n  };\n  /**\n   * @private emit event to the listeners\n   * @param {String} event\n   * @param {Object} data\n   */\n\n\n  _proto.emit = function emit(event, data) {\n    // we also want to trigger dom events\n    if (this.options.domEvents) {\n      triggerDomEvent(event, data);\n    } // no handlers, so skip it all\n\n\n    var handlers = this.handlers[event] && this.handlers[event].slice();\n\n    if (!handlers || !handlers.length) {\n      return;\n    }\n\n    data.type = event;\n\n    data.preventDefault = function () {\n      data.srcEvent.preventDefault();\n    };\n\n    var i = 0;\n\n    while (i < handlers.length) {\n      handlers[i](data);\n      i++;\n    }\n  };\n  /**\n   * @private\n   * destroy the manager and unbinds all events\n   * it doesn't unbind dom events, that is the user own responsibility\n   */\n\n\n  _proto.destroy = function destroy() {\n    this.element && toggleCssProps(this, false);\n    this.handlers = {};\n    this.session = {};\n    this.input.destroy();\n    this.element = null;\n  };\n\n  return Manager;\n}();\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n  touchstart: INPUT_START,\n  touchmove: INPUT_MOVE,\n  touchend: INPUT_END,\n  touchcancel: INPUT_CANCEL\n};\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Touch events input\n * @constructor\n * @extends Input\n */\n\nvar SingleTouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(SingleTouchInput, _Input);\n\n  function SingleTouchInput() {\n    var _this;\n\n    var proto = SingleTouchInput.prototype;\n    proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n    proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.started = false;\n    return _this;\n  }\n\n  var _proto = SingleTouchInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n    if (type === INPUT_START) {\n      this.started = true;\n    }\n\n    if (!this.started) {\n      return;\n    }\n\n    var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n    if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n      this.started = false;\n    }\n\n    this.callback(this.manager, type, {\n      pointers: touches[0],\n      changedPointers: touches[1],\n      pointerType: INPUT_TYPE_TOUCH,\n      srcEvent: ev\n    });\n  };\n\n  return SingleTouchInput;\n}(Input);\n\nfunction normalizeSingleTouches(ev, type) {\n  var all = toArray(ev.touches);\n  var changed = toArray(ev.changedTouches);\n\n  if (type & (INPUT_END | INPUT_CANCEL)) {\n    all = uniqueArray(all.concat(changed), 'identifier', true);\n  }\n\n  return [all, changed];\n}\n\n/**\n * @private\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n  var deprecationMessage = \"DEPRECATED METHOD: \" + name + \"\\n\" + message + \" AT \\n\";\n  return function () {\n    var e = new Error('get-stack-trace');\n    var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n    var log = window.console && (window.console.warn || window.console.log);\n\n    if (log) {\n      log.call(window.console, deprecationMessage, stack);\n    }\n\n    return method.apply(this, arguments);\n  };\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\nvar extend = deprecate(function (dest, src, merge) {\n  var keys = Object.keys(src);\n  var i = 0;\n\n  while (i < keys.length) {\n    if (!merge || merge && dest[keys[i]] === undefined) {\n      dest[keys[i]] = src[keys[i]];\n    }\n\n    i++;\n  }\n\n  return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * @private\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\nvar merge = deprecate(function (dest, src) {\n  return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\nfunction inherit(child, base, properties) {\n  var baseP = base.prototype;\n  var childP;\n  childP = child.prototype = Object.create(baseP);\n  childP.constructor = child;\n  childP._super = baseP;\n\n  if (properties) {\n    assign$1(childP, properties);\n  }\n}\n\n/**\n * @private\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n  return function boundFn() {\n    return fn.apply(context, arguments);\n  };\n}\n\n/**\n * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\nvar Hammer =\n/*#__PURE__*/\nfunction () {\n  var Hammer =\n  /**\n    * @private\n    * @const {string}\n    */\n  function Hammer(element, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return new Manager(element, _extends({\n      recognizers: preset.concat()\n    }, options));\n  };\n\n  Hammer.VERSION = \"2.0.17-rc\";\n  Hammer.DIRECTION_ALL = DIRECTION_ALL;\n  Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n  Hammer.DIRECTION_LEFT = DIRECTION_LEFT;\n  Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT;\n  Hammer.DIRECTION_UP = DIRECTION_UP;\n  Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n  Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n  Hammer.DIRECTION_NONE = DIRECTION_NONE;\n  Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n  Hammer.INPUT_START = INPUT_START;\n  Hammer.INPUT_MOVE = INPUT_MOVE;\n  Hammer.INPUT_END = INPUT_END;\n  Hammer.INPUT_CANCEL = INPUT_CANCEL;\n  Hammer.STATE_POSSIBLE = STATE_POSSIBLE;\n  Hammer.STATE_BEGAN = STATE_BEGAN;\n  Hammer.STATE_CHANGED = STATE_CHANGED;\n  Hammer.STATE_ENDED = STATE_ENDED;\n  Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED;\n  Hammer.STATE_CANCELLED = STATE_CANCELLED;\n  Hammer.STATE_FAILED = STATE_FAILED;\n  Hammer.Manager = Manager;\n  Hammer.Input = Input;\n  Hammer.TouchAction = TouchAction;\n  Hammer.TouchInput = TouchInput;\n  Hammer.MouseInput = MouseInput;\n  Hammer.PointerEventInput = PointerEventInput;\n  Hammer.TouchMouseInput = TouchMouseInput;\n  Hammer.SingleTouchInput = SingleTouchInput;\n  Hammer.Recognizer = Recognizer;\n  Hammer.AttrRecognizer = AttrRecognizer;\n  Hammer.Tap = TapRecognizer;\n  Hammer.Pan = PanRecognizer;\n  Hammer.Swipe = SwipeRecognizer;\n  Hammer.Pinch = PinchRecognizer;\n  Hammer.Rotate = RotateRecognizer;\n  Hammer.Press = PressRecognizer;\n  Hammer.on = addEventListeners;\n  Hammer.off = removeEventListeners;\n  Hammer.each = each;\n  Hammer.merge = merge;\n  Hammer.extend = extend;\n  Hammer.bindFn = bindFn;\n  Hammer.assign = assign$1;\n  Hammer.inherit = inherit;\n  Hammer.bindFn = bindFn;\n  Hammer.prefixed = prefixed;\n  Hammer.toArray = toArray;\n  Hammer.inArray = inArray;\n  Hammer.uniqueArray = uniqueArray;\n  Hammer.splitStr = splitStr;\n  Hammer.boolOrFn = boolOrFn;\n  Hammer.hasParent = hasParent;\n  Hammer.addEventListeners = addEventListeners;\n  Hammer.removeEventListeners = removeEventListeners;\n  Hammer.defaults = assign$1({}, defaults, {\n    preset: preset\n  });\n  return Hammer;\n}();\n\n//  style loader but by script tag, not by the loader.\n\nvar defaults$1 = Hammer.defaults;\n\nexport default Hammer;\nexport { INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, Input, TouchAction, TouchInput, MouseInput, PointerEventInput, TouchMouseInput, SingleTouchInput, Recognizer, AttrRecognizer, TapRecognizer as Tap, PanRecognizer as Pan, SwipeRecognizer as Swipe, PinchRecognizer as Pinch, RotateRecognizer as Rotate, PressRecognizer as Press, addEventListeners as on, removeEventListeners as off, each, merge, extend, assign$1 as assign, inherit, bindFn, prefixed, toArray, inArray, uniqueArray, splitStr, boolOrFn, hasParent, addEventListeners, removeEventListeners, defaults$1 as defaults };\n//# sourceMappingURL=hammer.esm.js.map\n", "/**\n * vis-util\n * https://github.com/visjs/vis-util\n *\n * utilitie collection for visjs\n *\n * @version 6.0.0\n * @date    2025-07-12T18:02:43.836Z\n *\n * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n *\n * @license\n * vis.js is dual licensed under both\n *\n *   1. The Apache 2.0 License\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n *   and\n *\n *   2. The MIT License\n *      http://opensource.org/licenses/MIT\n *\n * vis.js may be distributed under either license.\n */\n\nimport Emitter from 'component-emitter';\nimport RealHammer from '@egjs/hammerjs';\n\n/**\n * Use this symbol to delete properies in deepObjectAssign.\n */\nconst DELETE = Symbol(\"DELETE\");\n/**\n * Pure version of deepObjectAssign, it doesn't modify any of it's arguments.\n * @param base - The base object that fullfils the whole interface T.\n * @param updates - Updates that may change or delete props.\n * @returns A brand new instance with all the supplied objects deeply merged.\n */\nfunction pureDeepObjectAssign(base, ...updates) {\n    return deepObjectAssign({}, base, ...updates);\n}\n/**\n * Deep version of object assign with additional deleting by the DELETE symbol.\n * @param values - Objects to be deeply merged.\n * @returns The first object from values.\n */\nfunction deepObjectAssign(...values) {\n    const merged = deepObjectAssignNonentry(...values);\n    stripDelete(merged);\n    return merged;\n}\n/**\n * Deep version of object assign with additional deleting by the DELETE symbol.\n * @remarks\n * This doesn't strip the DELETE symbols so they may end up in the final object.\n * @param values - Objects to be deeply merged.\n * @returns The first object from values.\n */\nfunction deepObjectAssignNonentry(...values) {\n    if (values.length < 2) {\n        return values[0];\n    }\n    else if (values.length > 2) {\n        return deepObjectAssignNonentry(deepObjectAssign(values[0], values[1]), ...values.slice(2));\n    }\n    const a = values[0];\n    const b = values[1];\n    if (a instanceof Date && b instanceof Date) {\n        a.setTime(b.getTime());\n        return a;\n    }\n    for (const prop of Reflect.ownKeys(b)) {\n        if (!Object.prototype.propertyIsEnumerable.call(b, prop)) ;\n        else if (b[prop] === DELETE) {\n            delete a[prop];\n        }\n        else if (a[prop] !== null &&\n            b[prop] !== null &&\n            typeof a[prop] === \"object\" &&\n            typeof b[prop] === \"object\" &&\n            !Array.isArray(a[prop]) &&\n            !Array.isArray(b[prop])) {\n            a[prop] = deepObjectAssignNonentry(a[prop], b[prop]);\n        }\n        else {\n            a[prop] = clone(b[prop]);\n        }\n    }\n    return a;\n}\n/**\n * Deep clone given object or array. In case of primitive simply return.\n * @param a - Anything.\n * @returns Deep cloned object/array or unchanged a.\n */\nfunction clone(a) {\n    if (Array.isArray(a)) {\n        return a.map((value) => clone(value));\n    }\n    else if (typeof a === \"object\" && a !== null) {\n        if (a instanceof Date) {\n            return new Date(a.getTime());\n        }\n        return deepObjectAssignNonentry({}, a);\n    }\n    else {\n        return a;\n    }\n}\n/**\n * Strip DELETE from given object.\n * @param a - Object which may contain DELETE but won't after this is executed.\n */\nfunction stripDelete(a) {\n    for (const prop of Object.keys(a)) {\n        if (a[prop] === DELETE) {\n            delete a[prop];\n        }\n        else if (typeof a[prop] === \"object\" && a[prop] !== null) {\n            stripDelete(a[prop]);\n        }\n    }\n}\n\n/**\n * Seedable, fast and reasonably good (not crypto but more than okay for our\n * needs) random number generator.\n * @remarks\n * Adapted from {@link https://web.archive.org/web/20110429100736/http://baagoe.com:80/en/RandomMusings/javascript}.\n * Original algorithm created by Johannes Baagøe \\<baagoe\\@baagoe.com\\> in 2010.\n */\n/**\n * Create a seeded pseudo random generator based on Alea by Johannes Baagøe.\n * @param seed - All supplied arguments will be used as a seed. In case nothing\n * is supplied the current time will be used to seed the generator.\n * @returns A ready to use seeded generator.\n */\nfunction Alea(...seed) {\n    return AleaImplementation(seed.length ? seed : [Date.now()]);\n}\n/**\n * An implementation of [[Alea]] without user input validation.\n * @param seed - The data that will be used to seed the generator.\n * @returns A ready to use seeded generator.\n */\nfunction AleaImplementation(seed) {\n    let [s0, s1, s2] = mashSeed(seed);\n    let c = 1;\n    const random = () => {\n        const t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32\n        s0 = s1;\n        s1 = s2;\n        return (s2 = t - (c = t | 0));\n    };\n    random.uint32 = () => random() * 0x100000000; // 2^32\n    random.fract53 = () => random() + ((random() * 0x200000) | 0) * 1.1102230246251565e-16; // 2^-53\n    random.algorithm = \"Alea\";\n    random.seed = seed;\n    random.version = \"0.9\";\n    return random;\n}\n/**\n * Turn arbitrary data into values [[AleaImplementation]] can use to generate\n * random numbers.\n * @param seed - Arbitrary data that will be used as the seed.\n * @returns Three numbers to use as initial values for [[AleaImplementation]].\n */\nfunction mashSeed(...seed) {\n    const mash = Mash();\n    let s0 = mash(\" \");\n    let s1 = mash(\" \");\n    let s2 = mash(\" \");\n    for (let i = 0; i < seed.length; i++) {\n        s0 -= mash(seed[i]);\n        if (s0 < 0) {\n            s0 += 1;\n        }\n        s1 -= mash(seed[i]);\n        if (s1 < 0) {\n            s1 += 1;\n        }\n        s2 -= mash(seed[i]);\n        if (s2 < 0) {\n            s2 += 1;\n        }\n    }\n    return [s0, s1, s2];\n}\n/**\n * Create a new mash function.\n * @returns A nonpure function that takes arbitrary [[Mashable]] data and turns\n * them into numbers.\n */\nfunction Mash() {\n    let n = 0xefc8249d;\n    return function (data) {\n        const string = data.toString();\n        for (let i = 0; i < string.length; i++) {\n            n += string.charCodeAt(i);\n            let h = 0.02519603282416938 * n;\n            n = h >>> 0;\n            h -= n;\n            h *= n;\n            n = h >>> 0;\n            h -= n;\n            n += h * 0x100000000; // 2^32\n        }\n        return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n    };\n}\n\n/**\n * Setup a mock hammer.js object, for unit testing.\n *\n * Inspiration: https://github.com/uber/deck.gl/pull/658\n * @returns {{on: noop, off: noop, destroy: noop, emit: noop, get: get}}\n */\nfunction hammerMock() {\n  const noop = () => {};\n\n  return {\n    on: noop,\n    off: noop,\n    destroy: noop,\n    emit: noop,\n\n    get() {\n      return {\n        set: noop,\n      };\n    },\n  };\n}\n\nconst Hammer$1 =\n  typeof window !== \"undefined\"\n    ? window.Hammer || RealHammer\n    : function () {\n        // hammer.js is only available in a browser, not in node.js. Replacing it with a mock object.\n        return hammerMock();\n      };\n\n/**\n * Turn an element into an clickToUse element.\n * When not active, the element has a transparent overlay. When the overlay is\n * clicked, the mode is changed to active.\n * When active, the element is displayed with a blue border around it, and\n * the interactive contents of the element can be used. When clicked outside\n * the element, the elements mode is changed to inactive.\n * @param {Element} container\n * @class Activator\n */\nfunction Activator$1(container) {\n  this._cleanupQueue = [];\n\n  this.active = false;\n\n  this._dom = {\n    container,\n    overlay: document.createElement(\"div\"),\n  };\n\n  this._dom.overlay.classList.add(\"vis-overlay\");\n\n  this._dom.container.appendChild(this._dom.overlay);\n  this._cleanupQueue.push(() => {\n    this._dom.overlay.parentNode.removeChild(this._dom.overlay);\n  });\n\n  const hammer = Hammer$1(this._dom.overlay);\n  hammer.on(\"tap\", this._onTapOverlay.bind(this));\n  this._cleanupQueue.push(() => {\n    hammer.destroy();\n    // FIXME: cleaning up hammer instances doesn't work (Timeline not removed\n    // from memory)\n  });\n\n  // block all touch events (except tap)\n  const events = [\n    \"tap\",\n    \"doubletap\",\n    \"press\",\n    \"pinch\",\n    \"pan\",\n    \"panstart\",\n    \"panmove\",\n    \"panend\",\n  ];\n  events.forEach((event) => {\n    hammer.on(event, (event) => {\n      event.srcEvent.stopPropagation();\n    });\n  });\n\n  // attach a click event to the window, in order to deactivate when clicking outside the timeline\n  if (document && document.body) {\n    this._onClick = (event) => {\n      if (!_hasParent(event.target, container)) {\n        this.deactivate();\n      }\n    };\n    document.body.addEventListener(\"click\", this._onClick);\n    this._cleanupQueue.push(() => {\n      document.body.removeEventListener(\"click\", this._onClick);\n    });\n  }\n\n  // prepare escape key listener for deactivating when active\n  this._escListener = (event) => {\n    if (\n      \"key\" in event\n        ? event.key === \"Escape\"\n        : event.keyCode === 27 /* the keyCode is for IE11 */\n    ) {\n      this.deactivate();\n    }\n  };\n}\n\n// turn into an event emitter\nEmitter(Activator$1.prototype);\n\n// The currently active activator\nActivator$1.current = null;\n\n/**\n * Destroy the activator. Cleans up all created DOM and event listeners\n */\nActivator$1.prototype.destroy = function () {\n  this.deactivate();\n\n  for (const callback of this._cleanupQueue.splice(0).reverse()) {\n    callback();\n  }\n};\n\n/**\n * Activate the element\n * Overlay is hidden, element is decorated with a blue shadow border\n */\nActivator$1.prototype.activate = function () {\n  // we allow only one active activator at a time\n  if (Activator$1.current) {\n    Activator$1.current.deactivate();\n  }\n  Activator$1.current = this;\n\n  this.active = true;\n  this._dom.overlay.style.display = \"none\";\n  this._dom.container.classList.add(\"vis-active\");\n\n  this.emit(\"change\");\n  this.emit(\"activate\");\n\n  // ugly hack: bind ESC after emitting the events, as the Network rebinds all\n  // keyboard events on a 'change' event\n  document.body.addEventListener(\"keydown\", this._escListener);\n};\n\n/**\n * Deactivate the element\n * Overlay is displayed on top of the element\n */\nActivator$1.prototype.deactivate = function () {\n  this.active = false;\n  this._dom.overlay.style.display = \"block\";\n  this._dom.container.classList.remove(\"vis-active\");\n  document.body.removeEventListener(\"keydown\", this._escListener);\n\n  this.emit(\"change\");\n  this.emit(\"deactivate\");\n};\n\n/**\n * Handle a tap event: activate the container\n * @param {Event}  event   The event\n * @private\n */\nActivator$1.prototype._onTapOverlay = function (event) {\n  // activate the container\n  this.activate();\n  event.srcEvent.stopPropagation();\n};\n\n/**\n * Test whether the element has the requested parent element somewhere in\n * its chain of parent nodes.\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @returns {boolean} Returns true when the parent is found somewhere in the\n *                    chain of parent nodes.\n * @private\n */\nfunction _hasParent(element, parent) {\n  while (element) {\n    if (element === parent) {\n      return true;\n    }\n    element = element.parentNode;\n  }\n  return false;\n}\n\n// utility functions\n// parse ASP.Net Date pattern,\n// for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/'\n// code from http://momentjs.com/\nconst ASPDateRegex = /^\\/?Date\\((-?\\d+)/i;\n// Color REs\nconst fullHexRE = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\nconst shortHexRE = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\nconst rgbRE = /^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i;\nconst rgbaRE = /^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;\n/**\n * Test whether given object is a number.\n * @param value - Input value of unknown type.\n * @returns True if number, false otherwise.\n */\nfunction isNumber(value) {\n    return value instanceof Number || typeof value === \"number\";\n}\n/**\n * Remove everything in the DOM object.\n * @param DOMobject - Node whose child nodes will be recursively deleted.\n */\nfunction recursiveDOMDelete(DOMobject) {\n    if (DOMobject) {\n        while (DOMobject.hasChildNodes() === true) {\n            const child = DOMobject.firstChild;\n            if (child) {\n                recursiveDOMDelete(child);\n                DOMobject.removeChild(child);\n            }\n        }\n    }\n}\n/**\n * Test whether given object is a string.\n * @param value - Input value of unknown type.\n * @returns True if string, false otherwise.\n */\nfunction isString(value) {\n    return value instanceof String || typeof value === \"string\";\n}\n/**\n * Test whether given object is a object (not primitive or null).\n * @param value - Input value of unknown type.\n * @returns True if not null object, false otherwise.\n */\nfunction isObject(value) {\n    return typeof value === \"object\" && value !== null;\n}\n/**\n * Test whether given object is a Date, or a String containing a Date.\n * @param value - Input value of unknown type.\n * @returns True if Date instance or string date representation, false otherwise.\n */\nfunction isDate(value) {\n    if (value instanceof Date) {\n        return true;\n    }\n    else if (isString(value)) {\n        // test whether this string contains a date\n        const match = ASPDateRegex.exec(value);\n        if (match) {\n            return true;\n        }\n        else if (!isNaN(Date.parse(value))) {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * Copy property from b to a if property present in a.\n * If property in b explicitly set to null, delete it if `allowDeletion` set.\n *\n * Internal helper routine, should not be exported. Not added to `exports` for that reason.\n * @param a - Target object.\n * @param b - Source object.\n * @param prop - Name of property to copy from b to a.\n * @param allowDeletion - If true, delete property in a if explicitly set to null in b.\n */\nfunction copyOrDelete(a, b, prop, allowDeletion) {\n    let doDeletion = false;\n    if (allowDeletion === true) {\n        doDeletion = b[prop] === null && a[prop] !== undefined;\n    }\n    if (doDeletion) {\n        delete a[prop];\n    }\n    else {\n        a[prop] = b[prop]; // Remember, this is a reference copy!\n    }\n}\n/**\n * Fill an object with a possibly partially defined other object.\n *\n * Only copies values for the properties already present in a.\n * That means an object is not created on a property if only the b object has it.\n * @param a - The object that will have it's properties updated.\n * @param b - The object with property updates.\n * @param allowDeletion - If true, delete properties in a that are explicitly set to null in b.\n */\nfunction fillIfDefined(a, b, allowDeletion = false) {\n    // NOTE: iteration of properties of a\n    // NOTE: prototype properties iterated over as well\n    for (const prop in a) {\n        if (b[prop] !== undefined) {\n            if (b[prop] === null || typeof b[prop] !== \"object\") {\n                // Note: typeof null === 'object'\n                copyOrDelete(a, b, prop, allowDeletion);\n            }\n            else {\n                const aProp = a[prop];\n                const bProp = b[prop];\n                if (isObject(aProp) && isObject(bProp)) {\n                    fillIfDefined(aProp, bProp, allowDeletion);\n                }\n            }\n        }\n    }\n}\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param source - The source object from which to copy properties.\n * @returns The target object.\n */\nconst extend = Object.assign;\n/**\n * Extend object a with selected properties of object b or a series of objects.\n * @remarks\n * Only properties with defined values are copied.\n * @param props - Properties to be copied to a.\n * @param a - The target.\n * @param others - The sources.\n * @returns Argument a.\n */\nfunction selectiveExtend(props, a, ...others) {\n    if (!Array.isArray(props)) {\n        throw new Error(\"Array with property names expected as first argument\");\n    }\n    for (const other of others) {\n        for (let p = 0; p < props.length; p++) {\n            const prop = props[p];\n            if (other && Object.prototype.hasOwnProperty.call(other, prop)) {\n                a[prop] = other[prop];\n            }\n        }\n    }\n    return a;\n}\n/**\n * Extend object a with selected properties of object b.\n * Only properties with defined values are copied.\n * @remarks\n * Previous version of this routine implied that multiple source objects could\n * be used; however, the implementation was **wrong**. Since multiple (\\>1)\n * sources weren't used anywhere in the `vis.js` code, this has been removed\n * @param props - Names of first-level properties to copy over.\n * @param a - Target object.\n * @param b - Source object.\n * @param allowDeletion - If true, delete property in a if explicitly set to null in b.\n * @returns Argument a.\n */\nfunction selectiveDeepExtend(props, a, b, allowDeletion = false) {\n    // TODO: add support for Arrays to deepExtend\n    if (Array.isArray(b)) {\n        throw new TypeError(\"Arrays are not supported by deepExtend\");\n    }\n    for (let p = 0; p < props.length; p++) {\n        const prop = props[p];\n        if (Object.prototype.hasOwnProperty.call(b, prop)) {\n            if (b[prop] && b[prop].constructor === Object) {\n                if (a[prop] === undefined) {\n                    a[prop] = {};\n                }\n                if (a[prop].constructor === Object) {\n                    deepExtend(a[prop], b[prop], false, allowDeletion);\n                }\n                else {\n                    copyOrDelete(a, b, prop, allowDeletion);\n                }\n            }\n            else if (Array.isArray(b[prop])) {\n                throw new TypeError(\"Arrays are not supported by deepExtend\");\n            }\n            else {\n                copyOrDelete(a, b, prop, allowDeletion);\n            }\n        }\n    }\n    return a;\n}\n/**\n * Extend object `a` with properties of object `b`, ignoring properties which\n * are explicitly specified to be excluded.\n * @remarks\n * The properties of `b` are considered for copying. Properties which are\n * themselves objects are are also extended. Only properties with defined\n * values are copied.\n * @param propsToExclude - Names of properties which should *not* be copied.\n * @param a - Object to extend.\n * @param b - Object to take properties from for extension.\n * @param allowDeletion - If true, delete properties in a that are explicitly\n * set to null in b.\n * @returns Argument a.\n */\nfunction selectiveNotDeepExtend(propsToExclude, a, b, allowDeletion = false) {\n    // TODO: add support for Arrays to deepExtend\n    // NOTE: array properties have an else-below; apparently, there is a problem here.\n    if (Array.isArray(b)) {\n        throw new TypeError(\"Arrays are not supported by deepExtend\");\n    }\n    for (const prop in b) {\n        if (!Object.prototype.hasOwnProperty.call(b, prop)) {\n            continue;\n        } // Handle local properties only\n        if (propsToExclude.includes(prop)) {\n            continue;\n        } // In exclusion list, skip\n        if (b[prop] && b[prop].constructor === Object) {\n            if (a[prop] === undefined) {\n                a[prop] = {};\n            }\n            if (a[prop].constructor === Object) {\n                deepExtend(a[prop], b[prop]); // NOTE: allowDeletion not propagated!\n            }\n            else {\n                copyOrDelete(a, b, prop, allowDeletion);\n            }\n        }\n        else if (Array.isArray(b[prop])) {\n            a[prop] = [];\n            for (let i = 0; i < b[prop].length; i++) {\n                a[prop].push(b[prop][i]);\n            }\n        }\n        else {\n            copyOrDelete(a, b, prop, allowDeletion);\n        }\n    }\n    return a;\n}\n/**\n * Deep extend an object a with the properties of object b.\n * @param a - Target object.\n * @param b - Source object.\n * @param protoExtend - If true, the prototype values will also be extended.\n * (That is the options objects that inherit from others will also get the\n * inherited options).\n * @param allowDeletion - If true, the values of fields that are null will be deleted.\n * @returns Argument a.\n */\nfunction deepExtend(a, b, protoExtend = false, allowDeletion = false) {\n    for (const prop in b) {\n        if (Object.prototype.hasOwnProperty.call(b, prop) || protoExtend === true) {\n            if (typeof b[prop] === \"object\" &&\n                b[prop] !== null &&\n                Object.getPrototypeOf(b[prop]) === Object.prototype) {\n                if (a[prop] === undefined) {\n                    a[prop] = deepExtend({}, b[prop], protoExtend); // NOTE: allowDeletion not propagated!\n                }\n                else if (typeof a[prop] === \"object\" &&\n                    a[prop] !== null &&\n                    Object.getPrototypeOf(a[prop]) === Object.prototype) {\n                    deepExtend(a[prop], b[prop], protoExtend); // NOTE: allowDeletion not propagated!\n                }\n                else {\n                    copyOrDelete(a, b, prop, allowDeletion);\n                }\n            }\n            else if (Array.isArray(b[prop])) {\n                a[prop] = b[prop].slice();\n            }\n            else {\n                copyOrDelete(a, b, prop, allowDeletion);\n            }\n        }\n    }\n    return a;\n}\n/**\n * Test whether all elements in two arrays are equal.\n * @param a - First array.\n * @param b - Second array.\n * @returns True if both arrays have the same length and same elements (1 = '1').\n */\nfunction equalArray(a, b) {\n    if (a.length !== b.length) {\n        return false;\n    }\n    for (let i = 0, len = a.length; i < len; i++) {\n        if (a[i] != b[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Get the type of an object, for example exports.getType([]) returns 'Array'.\n * @param object - Input value of unknown type.\n * @returns Detected type.\n */\nfunction getType(object) {\n    const type = typeof object;\n    if (type === \"object\") {\n        if (object === null) {\n            return \"null\";\n        }\n        if (object instanceof Boolean) {\n            return \"Boolean\";\n        }\n        if (object instanceof Number) {\n            return \"Number\";\n        }\n        if (object instanceof String) {\n            return \"String\";\n        }\n        if (Array.isArray(object)) {\n            return \"Array\";\n        }\n        if (object instanceof Date) {\n            return \"Date\";\n        }\n        return \"Object\";\n    }\n    if (type === \"number\") {\n        return \"Number\";\n    }\n    if (type === \"boolean\") {\n        return \"Boolean\";\n    }\n    if (type === \"string\") {\n        return \"String\";\n    }\n    if (type === undefined) {\n        return \"undefined\";\n    }\n    return type;\n}\n/**\n * Used to extend an array and copy it. This is used to propagate paths recursively.\n * @param arr - First part.\n * @param newValue - The value to be aadded into the array.\n * @returns A new array with all items from arr and newValue (which is last).\n */\nfunction copyAndExtendArray(arr, newValue) {\n    return [...arr, newValue];\n}\n/**\n * Used to extend an array and copy it. This is used to propagate paths recursively.\n * @param arr - The array to be copied.\n * @returns Shallow copy of arr.\n */\nfunction copyArray(arr) {\n    return arr.slice();\n}\n/**\n * Retrieve the absolute left value of a DOM element.\n * @param elem - A dom element, for example a div.\n * @returns The absolute left position of this element in the browser page.\n */\nfunction getAbsoluteLeft(elem) {\n    return elem.getBoundingClientRect().left;\n}\n/**\n * Retrieve the absolute right value of a DOM element.\n * @param elem - A dom element, for example a div.\n * @returns The absolute right position of this element in the browser page.\n */\nfunction getAbsoluteRight(elem) {\n    return elem.getBoundingClientRect().right;\n}\n/**\n * Retrieve the absolute top value of a DOM element.\n * @param elem - A dom element, for example a div.\n * @returns The absolute top position of this element in the browser page.\n */\nfunction getAbsoluteTop(elem) {\n    return elem.getBoundingClientRect().top;\n}\n/**\n * Add a className to the given elements style.\n * @param elem - The element to which the classes will be added.\n * @param classNames - Space separated list of classes.\n */\nfunction addClassName(elem, classNames) {\n    let classes = elem.className.split(\" \");\n    const newClasses = classNames.split(\" \");\n    classes = classes.concat(newClasses.filter(function (className) {\n        return !classes.includes(className);\n    }));\n    elem.className = classes.join(\" \");\n}\n/**\n * Remove a className from the given elements style.\n * @param elem - The element from which the classes will be removed.\n * @param classNames - Space separated list of classes.\n */\nfunction removeClassName(elem, classNames) {\n    let classes = elem.className.split(\" \");\n    const oldClasses = classNames.split(\" \");\n    classes = classes.filter(function (className) {\n        return !oldClasses.includes(className);\n    });\n    elem.className = classes.join(\" \");\n}\n/**\n * For each method for both arrays and objects.\n * In case of an array, the built-in Array.forEach() is applied (**No, it's not!**).\n * In case of an Object, the method loops over all properties of the object.\n * @param object - An Object or Array to be iterated over.\n * @param callback - Array.forEach-like callback.\n */\nfunction forEach(object, callback) {\n    if (Array.isArray(object)) {\n        // array\n        const len = object.length;\n        for (let i = 0; i < len; i++) {\n            callback(object[i], i, object);\n        }\n    }\n    else {\n        // object\n        for (const key in object) {\n            if (Object.prototype.hasOwnProperty.call(object, key)) {\n                callback(object[key], key, object);\n            }\n        }\n    }\n}\n/**\n * Convert an object into an array: all objects properties are put into the array. The resulting array is unordered.\n * @param o - Object that contains the properties and methods.\n * @returns An array of unordered values.\n */\nconst toArray = Object.values;\n/**\n * Update a property in an object.\n * @param object - The object whose property will be updated.\n * @param key - Name of the property to be updated.\n * @param value - The new value to be assigned.\n * @returns Whether the value was updated (true) or already strictly the same in the original object (false).\n */\nfunction updateProperty(object, key, value) {\n    if (object[key] !== value) {\n        object[key] = value;\n        return true;\n    }\n    else {\n        return false;\n    }\n}\n/**\n * Throttle the given function to be only executed once per animation frame.\n * @param fn - The original function.\n * @returns The throttled function.\n */\nfunction throttle(fn) {\n    let scheduled = false;\n    return () => {\n        if (!scheduled) {\n            scheduled = true;\n            requestAnimationFrame(() => {\n                scheduled = false;\n                fn();\n            });\n        }\n    };\n}\n/**\n * Cancels the event's default action if it is cancelable, without stopping further propagation of the event.\n * @param event - The event whose default action should be prevented.\n */\nfunction preventDefault(event) {\n    if (!event) {\n        event = window.event;\n    }\n    if (!event) ;\n    else if (event.preventDefault) {\n        event.preventDefault(); // non-IE browsers\n    }\n    else {\n        // @TODO: IE types? Does anyone care?\n        event.returnValue = false; // IE browsers\n    }\n}\n/**\n * Get HTML element which is the target of the event.\n * @param event - The event.\n * @returns The element or null if not obtainable.\n */\nfunction getTarget(event = window.event) {\n    // code from http://www.quirksmode.org/js/events_properties.html\n    // @TODO: EventTarget can be almost anything, is it okay to return only Elements?\n    let target = null;\n    if (!event) ;\n    else if (event.target) {\n        target = event.target;\n    }\n    else if (event.srcElement) {\n        target = event.srcElement;\n    }\n    if (!(target instanceof Element)) {\n        return null;\n    }\n    if (target.nodeType != null && target.nodeType == 3) {\n        // defeat Safari bug\n        target = target.parentNode;\n        if (!(target instanceof Element)) {\n            return null;\n        }\n    }\n    return target;\n}\n/**\n * Check if given element contains given parent somewhere in the DOM tree.\n * @param element - The element to be tested.\n * @param parent - The ancestor (not necessarily parent) of the element.\n * @returns True if parent is an ancestor of the element, false otherwise.\n */\nfunction hasParent(element, parent) {\n    let elem = element;\n    while (elem) {\n        if (elem === parent) {\n            return true;\n        }\n        else if (elem.parentNode) {\n            elem = elem.parentNode;\n        }\n        else {\n            return false;\n        }\n    }\n    return false;\n}\nconst option = {\n    /**\n     * Convert a value into a boolean.\n     * @param value - Value to be converted intoboolean, a function will be executed as `(() => unknown)`.\n     * @param defaultValue - If the value or the return value of the function == null then this will be returned.\n     * @returns Corresponding boolean value, if none then the default value, if none then null.\n     */\n    asBoolean(value, defaultValue) {\n        if (typeof value == \"function\") {\n            value = value();\n        }\n        if (value != null) {\n            return value != false;\n        }\n        return defaultValue || null;\n    },\n    /**\n     * Convert a value into a number.\n     * @param value - Value to be converted intonumber, a function will be executed as `(() => unknown)`.\n     * @param defaultValue - If the value or the return value of the function == null then this will be returned.\n     * @returns Corresponding **boxed** number value, if none then the default value, if none then null.\n     */\n    asNumber(value, defaultValue) {\n        if (typeof value == \"function\") {\n            value = value();\n        }\n        if (value != null) {\n            return Number(value) || defaultValue || null;\n        }\n        return defaultValue || null;\n    },\n    /**\n     * Convert a value into a string.\n     * @param value - Value to be converted intostring, a function will be executed as `(() => unknown)`.\n     * @param defaultValue - If the value or the return value of the function == null then this will be returned.\n     * @returns Corresponding **boxed** string value, if none then the default value, if none then null.\n     */\n    asString(value, defaultValue) {\n        if (typeof value == \"function\") {\n            value = value();\n        }\n        if (value != null) {\n            return String(value);\n        }\n        return defaultValue || null;\n    },\n    /**\n     * Convert a value into a size.\n     * @param value - Value to be converted intosize, a function will be executed as `(() => unknown)`.\n     * @param defaultValue - If the value or the return value of the function == null then this will be returned.\n     * @returns Corresponding string value (number + 'px'), if none then the default value, if none then null.\n     */\n    asSize(value, defaultValue) {\n        if (typeof value == \"function\") {\n            value = value();\n        }\n        if (isString(value)) {\n            return value;\n        }\n        else if (isNumber(value)) {\n            return value + \"px\";\n        }\n        else {\n            return defaultValue || null;\n        }\n    },\n    /**\n     * Convert a value into a DOM Element.\n     * @param value - Value to be converted into DOM Element, a function will be executed as `(() => unknown)`.\n     * @param defaultValue - If the value or the return value of the function == null then this will be returned.\n     * @returns The DOM Element, if none then the default value, if none then null.\n     */\n    asElement(value, defaultValue) {\n        if (typeof value == \"function\") {\n            value = value();\n        }\n        return value || defaultValue || null;\n    },\n};\n/**\n * Convert hex color string into RGB color object.\n * @remarks\n * {@link http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb}\n * @param hex - Hex color string (3 or 6 digits, with or without #).\n * @returns RGB color object.\n */\nfunction hexToRGB(hex) {\n    let result;\n    switch (hex.length) {\n        case 3:\n        case 4:\n            result = shortHexRE.exec(hex);\n            return result\n                ? {\n                    r: parseInt(result[1] + result[1], 16),\n                    g: parseInt(result[2] + result[2], 16),\n                    b: parseInt(result[3] + result[3], 16),\n                }\n                : null;\n        case 6:\n        case 7:\n            result = fullHexRE.exec(hex);\n            return result\n                ? {\n                    r: parseInt(result[1], 16),\n                    g: parseInt(result[2], 16),\n                    b: parseInt(result[3], 16),\n                }\n                : null;\n        default:\n            return null;\n    }\n}\n/**\n * This function takes string color in hex or RGB format and adds the opacity, RGBA is passed through unchanged.\n * @param color - The color string (hex, RGB, RGBA).\n * @param opacity - The new opacity.\n * @returns RGBA string, for example 'rgba(255, 0, 127, 0.3)'.\n */\nfunction overrideOpacity(color, opacity) {\n    if (color.includes(\"rgba\")) {\n        return color;\n    }\n    else if (color.includes(\"rgb\")) {\n        const rgb = color\n            .substr(color.indexOf(\"(\") + 1)\n            .replace(\")\", \"\")\n            .split(\",\");\n        return \"rgba(\" + rgb[0] + \",\" + rgb[1] + \",\" + rgb[2] + \",\" + opacity + \")\";\n    }\n    else {\n        const rgb = hexToRGB(color);\n        if (rgb == null) {\n            return color;\n        }\n        else {\n            return \"rgba(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \",\" + opacity + \")\";\n        }\n    }\n}\n/**\n * Convert RGB \\<0, 255\\> into hex color string.\n * @param red - Red channel.\n * @param green - Green channel.\n * @param blue - Blue channel.\n * @returns Hex color string (for example: '#0acdc0').\n */\nfunction RGBToHex(red, green, blue) {\n    return (\"#\" + ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16).slice(1));\n}\n/**\n * Parse a color property into an object with border, background, and highlight colors.\n * @param inputColor - Shorthand color string or input color object.\n * @param defaultColor - Full color object to fill in missing values in inputColor.\n * @returns Color object.\n */\nfunction parseColor(inputColor, defaultColor) {\n    if (isString(inputColor)) {\n        let colorStr = inputColor;\n        if (isValidRGB(colorStr)) {\n            const rgb = colorStr\n                .substr(4)\n                .substr(0, colorStr.length - 5)\n                .split(\",\")\n                .map(function (value) {\n                return parseInt(value);\n            });\n            colorStr = RGBToHex(rgb[0], rgb[1], rgb[2]);\n        }\n        if (isValidHex(colorStr) === true) {\n            const hsv = hexToHSV(colorStr);\n            const lighterColorHSV = {\n                h: hsv.h,\n                s: hsv.s * 0.8,\n                v: Math.min(1, hsv.v * 1.02),\n            };\n            const darkerColorHSV = {\n                h: hsv.h,\n                s: Math.min(1, hsv.s * 1.25),\n                v: hsv.v * 0.8,\n            };\n            const darkerColorHex = HSVToHex(darkerColorHSV.h, darkerColorHSV.s, darkerColorHSV.v);\n            const lighterColorHex = HSVToHex(lighterColorHSV.h, lighterColorHSV.s, lighterColorHSV.v);\n            return {\n                background: colorStr,\n                border: darkerColorHex,\n                highlight: {\n                    background: lighterColorHex,\n                    border: darkerColorHex,\n                },\n                hover: {\n                    background: lighterColorHex,\n                    border: darkerColorHex,\n                },\n            };\n        }\n        else {\n            return {\n                background: colorStr,\n                border: colorStr,\n                highlight: {\n                    background: colorStr,\n                    border: colorStr,\n                },\n                hover: {\n                    background: colorStr,\n                    border: colorStr,\n                },\n            };\n        }\n    }\n    else {\n        if (defaultColor) {\n            const color = {\n                background: inputColor.background || defaultColor.background,\n                border: inputColor.border || defaultColor.border,\n                highlight: isString(inputColor.highlight)\n                    ? {\n                        border: inputColor.highlight,\n                        background: inputColor.highlight,\n                    }\n                    : {\n                        background: (inputColor.highlight && inputColor.highlight.background) ||\n                            defaultColor.highlight.background,\n                        border: (inputColor.highlight && inputColor.highlight.border) ||\n                            defaultColor.highlight.border,\n                    },\n                hover: isString(inputColor.hover)\n                    ? {\n                        border: inputColor.hover,\n                        background: inputColor.hover,\n                    }\n                    : {\n                        border: (inputColor.hover && inputColor.hover.border) ||\n                            defaultColor.hover.border,\n                        background: (inputColor.hover && inputColor.hover.background) ||\n                            defaultColor.hover.background,\n                    },\n            };\n            return color;\n        }\n        else {\n            const color = {\n                background: inputColor.background || undefined,\n                border: inputColor.border || undefined,\n                highlight: isString(inputColor.highlight)\n                    ? {\n                        border: inputColor.highlight,\n                        background: inputColor.highlight,\n                    }\n                    : {\n                        background: (inputColor.highlight && inputColor.highlight.background) ||\n                            undefined,\n                        border: (inputColor.highlight && inputColor.highlight.border) ||\n                            undefined,\n                    },\n                hover: isString(inputColor.hover)\n                    ? {\n                        border: inputColor.hover,\n                        background: inputColor.hover,\n                    }\n                    : {\n                        border: (inputColor.hover && inputColor.hover.border) || undefined,\n                        background: (inputColor.hover && inputColor.hover.background) || undefined,\n                    },\n            };\n            return color;\n        }\n    }\n}\n/**\n * Convert RGB \\<0, 255\\> into HSV object.\n * @remarks\n * {@link http://www.javascripter.net/faq/rgb2hsv.htm}\n * @param red - Red channel.\n * @param green - Green channel.\n * @param blue - Blue channel.\n * @returns HSV color object.\n */\nfunction RGBToHSV(red, green, blue) {\n    red = red / 255;\n    green = green / 255;\n    blue = blue / 255;\n    const minRGB = Math.min(red, Math.min(green, blue));\n    const maxRGB = Math.max(red, Math.max(green, blue));\n    // Black-gray-white\n    if (minRGB === maxRGB) {\n        return { h: 0, s: 0, v: minRGB };\n    }\n    // Colors other than black-gray-white:\n    const d = red === minRGB ? green - blue : blue === minRGB ? red - green : blue - red;\n    const h = red === minRGB ? 3 : blue === minRGB ? 1 : 5;\n    const hue = (60 * (h - d / (maxRGB - minRGB))) / 360;\n    const saturation = (maxRGB - minRGB) / maxRGB;\n    const value = maxRGB;\n    return { h: hue, s: saturation, v: value };\n}\n/**\n * Split a string with css styles into an object with key/values.\n * @param cssText - CSS source code to split into key/value object.\n * @returns Key/value object corresponding to {@link cssText}.\n */\nfunction splitCSSText(cssText) {\n    const tmpEllement = document.createElement(\"div\");\n    const styles = {};\n    tmpEllement.style.cssText = cssText;\n    for (let i = 0; i < tmpEllement.style.length; ++i) {\n        styles[tmpEllement.style[i]] = tmpEllement.style.getPropertyValue(tmpEllement.style[i]);\n    }\n    return styles;\n}\n/**\n * Append a string with css styles to an element.\n * @param element - The element that will receive new styles.\n * @param cssText - The styles to be appended.\n */\nfunction addCssText(element, cssText) {\n    const cssStyle = splitCSSText(cssText);\n    for (const [key, value] of Object.entries(cssStyle)) {\n        element.style.setProperty(key, value);\n    }\n}\n/**\n * Remove a string with css styles from an element.\n * @param element - The element from which styles should be removed.\n * @param cssText - The styles to be removed.\n */\nfunction removeCssText(element, cssText) {\n    const cssStyle = splitCSSText(cssText);\n    for (const key of Object.keys(cssStyle)) {\n        element.style.removeProperty(key);\n    }\n}\n/**\n * Convert HSV \\<0, 1\\> into RGB color object.\n * @remarks\n * {@link https://gist.github.com/mjijackson/5311256}\n * @param h - Hue.\n * @param s - Saturation.\n * @param v - Value.\n * @returns RGB color object.\n */\nfunction HSVToRGB(h, s, v) {\n    let r;\n    let g;\n    let b;\n    const i = Math.floor(h * 6);\n    const f = h * 6 - i;\n    const p = v * (1 - s);\n    const q = v * (1 - f * s);\n    const t = v * (1 - (1 - f) * s);\n    switch (i % 6) {\n        case 0:\n            ((r = v), (g = t), (b = p));\n            break;\n        case 1:\n            ((r = q), (g = v), (b = p));\n            break;\n        case 2:\n            ((r = p), (g = v), (b = t));\n            break;\n        case 3:\n            ((r = p), (g = q), (b = v));\n            break;\n        case 4:\n            ((r = t), (g = p), (b = v));\n            break;\n        case 5:\n            ((r = v), (g = p), (b = q));\n            break;\n    }\n    return {\n        r: Math.floor(r * 255),\n        g: Math.floor(g * 255),\n        b: Math.floor(b * 255),\n    };\n}\n/**\n * Convert HSV \\<0, 1\\> into hex color string.\n * @param h - Hue.\n * @param s - Saturation.\n * @param v - Value.\n * @returns Hex color string.\n */\nfunction HSVToHex(h, s, v) {\n    const rgb = HSVToRGB(h, s, v);\n    return RGBToHex(rgb.r, rgb.g, rgb.b);\n}\n/**\n * Convert hex color string into HSV \\<0, 1\\>.\n * @param hex - Hex color string.\n * @returns HSV color object.\n */\nfunction hexToHSV(hex) {\n    const rgb = hexToRGB(hex);\n    if (!rgb) {\n        throw new TypeError(`'${hex}' is not a valid color.`);\n    }\n    return RGBToHSV(rgb.r, rgb.g, rgb.b);\n}\n/**\n * Validate hex color string.\n * @param hex - Unknown string that may contain a color.\n * @returns True if the string is valid, false otherwise.\n */\nfunction isValidHex(hex) {\n    const isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex);\n    return isOk;\n}\n/**\n * Validate RGB color string.\n * @param rgb - Unknown string that may contain a color.\n * @returns True if the string is valid, false otherwise.\n */\nfunction isValidRGB(rgb) {\n    return rgbRE.test(rgb);\n}\n/**\n * Validate RGBA color string.\n * @param rgba - Unknown string that may contain a color.\n * @returns True if the string is valid, false otherwise.\n */\nfunction isValidRGBA(rgba) {\n    return rgbaRE.test(rgba);\n}\n/**\n * This recursively redirects the prototype of JSON objects to the referenceObject.\n * This is used for default options.\n * @param fields - Names of properties to be bridged.\n * @param referenceObject - The original object.\n * @returns A new object inheriting from the referenceObject.\n */\nfunction selectiveBridgeObject(fields, referenceObject) {\n    if (referenceObject !== null && typeof referenceObject === \"object\") {\n        // !!! typeof null === 'object'\n        const objectTo = Object.create(referenceObject);\n        for (let i = 0; i < fields.length; i++) {\n            if (Object.prototype.hasOwnProperty.call(referenceObject, fields[i])) {\n                if (typeof referenceObject[fields[i]] == \"object\") {\n                    objectTo[fields[i]] = bridgeObject(referenceObject[fields[i]]);\n                }\n            }\n        }\n        return objectTo;\n    }\n    else {\n        return null;\n    }\n}\n/**\n * This recursively redirects the prototype of JSON objects to the referenceObject.\n * This is used for default options.\n * @param referenceObject - The original object.\n * @returns The Element if the referenceObject is an Element, or a new object inheriting from the referenceObject.\n */\nfunction bridgeObject(referenceObject) {\n    if (referenceObject === null || typeof referenceObject !== \"object\") {\n        return null;\n    }\n    if (referenceObject instanceof Element) {\n        // Avoid bridging DOM objects\n        return referenceObject;\n    }\n    const objectTo = Object.create(referenceObject);\n    for (const i in referenceObject) {\n        if (Object.prototype.hasOwnProperty.call(referenceObject, i)) {\n            if (typeof referenceObject[i] == \"object\") {\n                objectTo[i] = bridgeObject(referenceObject[i]);\n            }\n        }\n    }\n    return objectTo;\n}\n/**\n * This method provides a stable sort implementation, very fast for presorted data.\n * @param a - The array to be sorted (in-place).\n * @param compare - An order comparator.\n * @returns The argument a.\n */\nfunction insertSort(a, compare) {\n    for (let i = 0; i < a.length; i++) {\n        const k = a[i];\n        let j;\n        for (j = i; j > 0 && compare(k, a[j - 1]) < 0; j--) {\n            a[j] = a[j - 1];\n        }\n        a[j] = k;\n    }\n    return a;\n}\n/**\n * This is used to set the options of subobjects in the options object.\n *\n * A requirement of these subobjects is that they have an 'enabled' element\n * which is optional for the user but mandatory for the program.\n *\n * The added value here of the merge is that option 'enabled' is set as required.\n * @param mergeTarget - Either this.options or the options used for the groups.\n * @param options - Options.\n * @param option - Option key in the options argument.\n * @param globalOptions - Global options, passed in to determine value of option 'enabled'.\n */\nfunction mergeOptions(mergeTarget, options, option, globalOptions = {}) {\n    // Local helpers\n    const isPresent = function (obj) {\n        return obj !== null && obj !== undefined;\n    };\n    const isObject = function (obj) {\n        return obj !== null && typeof obj === \"object\";\n    };\n    // https://stackoverflow.com/a/34491287/1223531\n    const isEmpty = function (obj) {\n        for (const x in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, x)) {\n                return false;\n            }\n        }\n        return true;\n    };\n    // Guards\n    if (!isObject(mergeTarget)) {\n        throw new Error(\"Parameter mergeTarget must be an object\");\n    }\n    if (!isObject(options)) {\n        throw new Error(\"Parameter options must be an object\");\n    }\n    if (!isPresent(option)) {\n        throw new Error(\"Parameter option must have a value\");\n    }\n    if (!isObject(globalOptions)) {\n        throw new Error(\"Parameter globalOptions must be an object\");\n    }\n    //\n    // Actual merge routine, separated from main logic\n    // Only a single level of options is merged. Deeper levels are ref'd. This may actually be an issue.\n    //\n    const doMerge = function (target, options, option) {\n        if (!isObject(target[option])) {\n            target[option] = {};\n        }\n        const src = options[option];\n        const dst = target[option];\n        for (const prop in src) {\n            if (Object.prototype.hasOwnProperty.call(src, prop)) {\n                dst[prop] = src[prop];\n            }\n        }\n    };\n    // Local initialization\n    const srcOption = options[option];\n    const globalPassed = isObject(globalOptions) && !isEmpty(globalOptions);\n    const globalOption = globalPassed ? globalOptions[option] : undefined;\n    const globalEnabled = globalOption ? globalOption.enabled : undefined;\n    /////////////////////////////////////////\n    // Main routine\n    /////////////////////////////////////////\n    if (srcOption === undefined) {\n        return; // Nothing to do\n    }\n    if (typeof srcOption === \"boolean\") {\n        if (!isObject(mergeTarget[option])) {\n            mergeTarget[option] = {};\n        }\n        mergeTarget[option].enabled = srcOption;\n        return;\n    }\n    if (srcOption === null && !isObject(mergeTarget[option])) {\n        // If possible, explicit copy from globals\n        if (isPresent(globalOption)) {\n            mergeTarget[option] = Object.create(globalOption);\n        }\n        else {\n            return; // Nothing to do\n        }\n    }\n    if (!isObject(srcOption)) {\n        return;\n    }\n    //\n    // Ensure that 'enabled' is properly set. It is required internally\n    // Note that the value from options will always overwrite the existing value\n    //\n    let enabled = true; // default value\n    if (srcOption.enabled !== undefined) {\n        enabled = srcOption.enabled;\n    }\n    else {\n        // Take from globals, if present\n        if (globalEnabled !== undefined) {\n            enabled = globalOption.enabled;\n        }\n    }\n    doMerge(mergeTarget, options, option);\n    mergeTarget[option].enabled = enabled;\n}\n/**\n * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses\n * this function will then iterate in both directions over this sorted list to find all visible items.\n * @param orderedItems - Items ordered by start.\n * @param comparator - -1 is lower, 0 is equal, 1 is higher.\n * @param field - Property name on an item (That is item[field]).\n * @param field2 - Second property name on an item (That is item[field][field2]).\n * @returns Index of the found item or -1 if nothing was found.\n */\nfunction binarySearchCustom(orderedItems, comparator, field, field2) {\n    const maxIterations = 10000;\n    let iteration = 0;\n    let low = 0;\n    let high = orderedItems.length - 1;\n    while (low <= high && iteration < maxIterations) {\n        const middle = Math.floor((low + high) / 2);\n        const item = orderedItems[middle];\n        const value = field2 === undefined ? item[field] : item[field][field2];\n        const searchResult = comparator(value);\n        if (searchResult == 0) {\n            // jihaa, found a visible item!\n            return middle;\n        }\n        else if (searchResult == -1) {\n            // it is too small --> increase low\n            low = middle + 1;\n        }\n        else {\n            // it is too big --> decrease high\n            high = middle - 1;\n        }\n        iteration++;\n    }\n    return -1;\n}\n/**\n * This function does a binary search for a specific value in a sorted array.\n * If it does not exist but is in between of two values, we return either the\n * one before or the one after, depending on user input If it is found, we\n * return the index, else -1.\n * @param orderedItems - Sorted array.\n * @param target - The searched value.\n * @param field - Name of the property in items to be searched.\n * @param sidePreference - If the target is between two values, should the index of the before or the after be returned?\n * @param comparator - An optional comparator, returning -1, 0, 1 for \\<, ===, \\>.\n * @returns The index of found value or -1 if nothing was found.\n */\nfunction binarySearchValue(orderedItems, target, field, sidePreference, comparator) {\n    const maxIterations = 10000;\n    let iteration = 0;\n    let low = 0;\n    let high = orderedItems.length - 1;\n    let prevValue;\n    let value;\n    let nextValue;\n    let middle;\n    comparator =\n        comparator != undefined\n            ? comparator\n            : function (a, b) {\n                return a == b ? 0 : a < b ? -1 : 1;\n            };\n    while (low <= high && iteration < maxIterations) {\n        // get a new guess\n        middle = Math.floor(0.5 * (high + low));\n        prevValue = orderedItems[Math.max(0, middle - 1)][field];\n        value = orderedItems[middle][field];\n        nextValue =\n            orderedItems[Math.min(orderedItems.length - 1, middle + 1)][field];\n        if (comparator(value, target) == 0) {\n            // we found the target\n            return middle;\n        }\n        else if (comparator(prevValue, target) < 0 &&\n            comparator(value, target) > 0) {\n            // target is in between of the previous and the current\n            return sidePreference == \"before\" ? Math.max(0, middle - 1) : middle;\n        }\n        else if (comparator(value, target) < 0 &&\n            comparator(nextValue, target) > 0) {\n            // target is in between of the current and the next\n            return sidePreference == \"before\"\n                ? middle\n                : Math.min(orderedItems.length - 1, middle + 1);\n        }\n        else {\n            // didnt find the target, we need to change our boundaries.\n            if (comparator(value, target) < 0) {\n                // it is too small --> increase low\n                low = middle + 1;\n            }\n            else {\n                // it is too big --> decrease high\n                high = middle - 1;\n            }\n        }\n        iteration++;\n    }\n    // didnt find anything. Return -1.\n    return -1;\n}\n/*\n * Easing Functions.\n * Only considering the t value for the range [0, 1] => [0, 1].\n *\n * Inspiration: from http://gizma.com/easing/\n * https://gist.github.com/gre/1650294\n */\nconst easingFunctions = {\n    /**\n     * Provides no easing and no acceleration.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    linear(t) {\n        return t;\n    },\n    /**\n     * Accelerate from zero velocity.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeInQuad(t) {\n        return t * t;\n    },\n    /**\n     * Decelerate to zero velocity.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeOutQuad(t) {\n        return t * (2 - t);\n    },\n    /**\n     * Accelerate until halfway, then decelerate.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeInOutQuad(t) {\n        return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n    },\n    /**\n     * Accelerate from zero velocity.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeInCubic(t) {\n        return t * t * t;\n    },\n    /**\n     * Decelerate to zero velocity.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeOutCubic(t) {\n        return --t * t * t + 1;\n    },\n    /**\n     * Accelerate until halfway, then decelerate.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeInOutCubic(t) {\n        return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n    },\n    /**\n     * Accelerate from zero velocity.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeInQuart(t) {\n        return t * t * t * t;\n    },\n    /**\n     * Decelerate to zero velocity.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeOutQuart(t) {\n        return 1 - --t * t * t * t;\n    },\n    /**\n     * Accelerate until halfway, then decelerate.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeInOutQuart(t) {\n        return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n    },\n    /**\n     * Accelerate from zero velocity.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeInQuint(t) {\n        return t * t * t * t * t;\n    },\n    /**\n     * Decelerate to zero velocity.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeOutQuint(t) {\n        return 1 + --t * t * t * t * t;\n    },\n    /**\n     * Accelerate until halfway, then decelerate.\n     * @param t - Time.\n     * @returns Value at time t.\n     */\n    easeInOutQuint(t) {\n        return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n    },\n};\n/**\n * Experimentaly compute the width of the scrollbar for this browser.\n * @returns The width in pixels.\n */\nfunction getScrollBarWidth() {\n    const inner = document.createElement(\"p\");\n    inner.style.width = \"100%\";\n    inner.style.height = \"200px\";\n    const outer = document.createElement(\"div\");\n    outer.style.position = \"absolute\";\n    outer.style.top = \"0px\";\n    outer.style.left = \"0px\";\n    outer.style.visibility = \"hidden\";\n    outer.style.width = \"200px\";\n    outer.style.height = \"150px\";\n    outer.style.overflow = \"hidden\";\n    outer.appendChild(inner);\n    document.body.appendChild(outer);\n    const w1 = inner.offsetWidth;\n    outer.style.overflow = \"scroll\";\n    let w2 = inner.offsetWidth;\n    if (w1 == w2) {\n        w2 = outer.clientWidth;\n    }\n    document.body.removeChild(outer);\n    return w1 - w2;\n}\n// @TODO: This doesn't work properly.\n// It works only for single property objects,\n// otherwise it combines all of the types in a union.\n// export function topMost<K1 extends string, V1> (\n//   pile: Record<K1, undefined | V1>[],\n//   accessors: K1 | [K1]\n// ): undefined | V1\n// export function topMost<K1 extends string, K2 extends string, V1, V2> (\n//   pile: Record<K1, undefined | V1 | Record<K2, undefined | V2>>[],\n//   accessors: [K1, K2]\n// ): undefined | V1 | V2\n// export function topMost<K1 extends string, K2 extends string, K3 extends string, V1, V2, V3> (\n//   pile: Record<K1, undefined | V1 | Record<K2, undefined | V2 | Record<K3, undefined | V3>>>[],\n//   accessors: [K1, K2, K3]\n// ): undefined | V1 | V2 | V3\n/**\n * Get the top most property value from a pile of objects.\n * @param pile - Array of objects, no required format.\n * @param accessors - Array of property names.\n * For example `object['foo']['bar']` → `['foo', 'bar']`.\n * @returns Value of the property with given accessors path from the first pile item where it's not undefined.\n */\nfunction topMost(pile, accessors) {\n    let candidate;\n    if (!Array.isArray(accessors)) {\n        accessors = [accessors];\n    }\n    for (const member of pile) {\n        if (member) {\n            candidate = member[accessors[0]];\n            for (let i = 1; i < accessors.length; i++) {\n                if (candidate) {\n                    candidate = candidate[accessors[i]];\n                }\n            }\n            if (typeof candidate !== \"undefined\") {\n                break;\n            }\n        }\n    }\n    return candidate;\n}\n\nconst htmlColors = {\n  black: \"#000000\",\n  navy: \"#000080\",\n  darkblue: \"#00008B\",\n  mediumblue: \"#0000CD\",\n  blue: \"#0000FF\",\n  darkgreen: \"#006400\",\n  green: \"#008000\",\n  teal: \"#008080\",\n  darkcyan: \"#008B8B\",\n  deepskyblue: \"#00BFFF\",\n  darkturquoise: \"#00CED1\",\n  mediumspringgreen: \"#00FA9A\",\n  lime: \"#00FF00\",\n  springgreen: \"#00FF7F\",\n  aqua: \"#00FFFF\",\n  cyan: \"#00FFFF\",\n  midnightblue: \"#191970\",\n  dodgerblue: \"#1E90FF\",\n  lightseagreen: \"#20B2AA\",\n  forestgreen: \"#228B22\",\n  seagreen: \"#2E8B57\",\n  darkslategray: \"#2F4F4F\",\n  limegreen: \"#32CD32\",\n  mediumseagreen: \"#3CB371\",\n  turquoise: \"#40E0D0\",\n  royalblue: \"#4169E1\",\n  steelblue: \"#4682B4\",\n  darkslateblue: \"#483D8B\",\n  mediumturquoise: \"#48D1CC\",\n  indigo: \"#4B0082\",\n  darkolivegreen: \"#556B2F\",\n  cadetblue: \"#5F9EA0\",\n  cornflowerblue: \"#6495ED\",\n  mediumaquamarine: \"#66CDAA\",\n  dimgray: \"#696969\",\n  slateblue: \"#6A5ACD\",\n  olivedrab: \"#6B8E23\",\n  slategray: \"#708090\",\n  lightslategray: \"#778899\",\n  mediumslateblue: \"#7B68EE\",\n  lawngreen: \"#7CFC00\",\n  chartreuse: \"#7FFF00\",\n  aquamarine: \"#7FFFD4\",\n  maroon: \"#800000\",\n  purple: \"#800080\",\n  olive: \"#808000\",\n  gray: \"#808080\",\n  skyblue: \"#87CEEB\",\n  lightskyblue: \"#87CEFA\",\n  blueviolet: \"#8A2BE2\",\n  darkred: \"#8B0000\",\n  darkmagenta: \"#8B008B\",\n  saddlebrown: \"#8B4513\",\n  darkseagreen: \"#8FBC8F\",\n  lightgreen: \"#90EE90\",\n  mediumpurple: \"#9370D8\",\n  darkviolet: \"#9400D3\",\n  palegreen: \"#98FB98\",\n  darkorchid: \"#9932CC\",\n  yellowgreen: \"#9ACD32\",\n  sienna: \"#A0522D\",\n  brown: \"#A52A2A\",\n  darkgray: \"#A9A9A9\",\n  lightblue: \"#ADD8E6\",\n  greenyellow: \"#ADFF2F\",\n  paleturquoise: \"#AFEEEE\",\n  lightsteelblue: \"#B0C4DE\",\n  powderblue: \"#B0E0E6\",\n  firebrick: \"#B22222\",\n  darkgoldenrod: \"#B8860B\",\n  mediumorchid: \"#BA55D3\",\n  rosybrown: \"#BC8F8F\",\n  darkkhaki: \"#BDB76B\",\n  silver: \"#C0C0C0\",\n  mediumvioletred: \"#C71585\",\n  indianred: \"#CD5C5C\",\n  peru: \"#CD853F\",\n  chocolate: \"#D2691E\",\n  tan: \"#D2B48C\",\n  lightgrey: \"#D3D3D3\",\n  palevioletred: \"#D87093\",\n  thistle: \"#D8BFD8\",\n  orchid: \"#DA70D6\",\n  goldenrod: \"#DAA520\",\n  crimson: \"#DC143C\",\n  gainsboro: \"#DCDCDC\",\n  plum: \"#DDA0DD\",\n  burlywood: \"#DEB887\",\n  lightcyan: \"#E0FFFF\",\n  lavender: \"#E6E6FA\",\n  darksalmon: \"#E9967A\",\n  violet: \"#EE82EE\",\n  palegoldenrod: \"#EEE8AA\",\n  lightcoral: \"#F08080\",\n  khaki: \"#F0E68C\",\n  aliceblue: \"#F0F8FF\",\n  honeydew: \"#F0FFF0\",\n  azure: \"#F0FFFF\",\n  sandybrown: \"#F4A460\",\n  wheat: \"#F5DEB3\",\n  beige: \"#F5F5DC\",\n  whitesmoke: \"#F5F5F5\",\n  mintcream: \"#F5FFFA\",\n  ghostwhite: \"#F8F8FF\",\n  salmon: \"#FA8072\",\n  antiquewhite: \"#FAEBD7\",\n  linen: \"#FAF0E6\",\n  lightgoldenrodyellow: \"#FAFAD2\",\n  oldlace: \"#FDF5E6\",\n  red: \"#FF0000\",\n  fuchsia: \"#FF00FF\",\n  magenta: \"#FF00FF\",\n  deeppink: \"#FF1493\",\n  orangered: \"#FF4500\",\n  tomato: \"#FF6347\",\n  hotpink: \"#FF69B4\",\n  coral: \"#FF7F50\",\n  darkorange: \"#FF8C00\",\n  lightsalmon: \"#FFA07A\",\n  orange: \"#FFA500\",\n  lightpink: \"#FFB6C1\",\n  pink: \"#FFC0CB\",\n  gold: \"#FFD700\",\n  peachpuff: \"#FFDAB9\",\n  navajowhite: \"#FFDEAD\",\n  moccasin: \"#FFE4B5\",\n  bisque: \"#FFE4C4\",\n  mistyrose: \"#FFE4E1\",\n  blanchedalmond: \"#FFEBCD\",\n  papayawhip: \"#FFEFD5\",\n  lavenderblush: \"#FFF0F5\",\n  seashell: \"#FFF5EE\",\n  cornsilk: \"#FFF8DC\",\n  lemonchiffon: \"#FFFACD\",\n  floralwhite: \"#FFFAF0\",\n  snow: \"#FFFAFA\",\n  yellow: \"#FFFF00\",\n  lightyellow: \"#FFFFE0\",\n  ivory: \"#FFFFF0\",\n  white: \"#FFFFFF\",\n};\n\n/**\n * @param {number} [pixelRatio=1]\n */\nlet ColorPicker$1 = class ColorPicker {\n  /**\n   * @param {number} [pixelRatio]\n   */\n  constructor(pixelRatio = 1) {\n    this.pixelRatio = pixelRatio;\n    this.generated = false;\n    this.centerCoordinates = { x: 289 / 2, y: 289 / 2 };\n    this.r = 289 * 0.49;\n    this.color = { r: 255, g: 255, b: 255, a: 1.0 };\n    this.hueCircle = undefined;\n    this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 };\n    this.previousColor = undefined;\n    this.applied = false;\n\n    // bound by\n    this.updateCallback = () => {};\n    this.closeCallback = () => {};\n\n    // create all DOM elements\n    this._create();\n  }\n\n  /**\n   * this inserts the colorPicker into a div from the DOM\n   * @param {Element} container\n   */\n  insertTo(container) {\n    if (this.hammer !== undefined) {\n      this.hammer.destroy();\n      this.hammer = undefined;\n    }\n    this.container = container;\n    this.container.appendChild(this.frame);\n    this._bindHammer();\n\n    this._setSize();\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param {Function} callback\n   */\n  setUpdateCallback(callback) {\n    if (typeof callback === \"function\") {\n      this.updateCallback = callback;\n    } else {\n      throw new Error(\n        \"Function attempted to set as colorPicker update callback is not a function.\",\n      );\n    }\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param {Function} callback\n   */\n  setCloseCallback(callback) {\n    if (typeof callback === \"function\") {\n      this.closeCallback = callback;\n    } else {\n      throw new Error(\n        \"Function attempted to set as colorPicker closing callback is not a function.\",\n      );\n    }\n  }\n\n  /**\n   *\n   * @param {string} color\n   * @returns {string}\n   * @private\n   */\n  _isColorString(color) {\n    if (typeof color === \"string\") {\n      return htmlColors[color];\n    }\n  }\n\n  /**\n   * Set the color of the colorPicker\n   * Supported formats:\n   * 'red'                   --> HTML color string\n   * '#ffffff'               --> hex string\n   * 'rgb(255,255,255)'      --> rgb string\n   * 'rgba(255,255,255,1.0)' --> rgba string\n   * {r:255,g:255,b:255}     --> rgb object\n   * {r:255,g:255,b:255,a:1.0} --> rgba object\n   * @param {string | object} color\n   * @param {boolean} [setInitial]\n   */\n  setColor(color, setInitial = true) {\n    if (color === \"none\") {\n      return;\n    }\n\n    let rgba;\n\n    // if a html color shorthand is used, convert to hex\n    const htmlColor = this._isColorString(color);\n    if (htmlColor !== undefined) {\n      color = htmlColor;\n    }\n\n    // check format\n    if (isString(color) === true) {\n      if (isValidRGB(color) === true) {\n        const rgbaArray = color\n          .substr(4)\n          .substr(0, color.length - 5)\n          .split(\",\");\n        rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 };\n      } else if (isValidRGBA(color) === true) {\n        const rgbaArray = color\n          .substr(5)\n          .substr(0, color.length - 6)\n          .split(\",\");\n        rgba = {\n          r: rgbaArray[0],\n          g: rgbaArray[1],\n          b: rgbaArray[2],\n          a: rgbaArray[3],\n        };\n      } else if (isValidHex(color) === true) {\n        const rgbObj = hexToRGB(color);\n        rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 };\n      }\n    } else {\n      if (color instanceof Object) {\n        if (\n          color.r !== undefined &&\n          color.g !== undefined &&\n          color.b !== undefined\n        ) {\n          const alpha = color.a !== undefined ? color.a : \"1.0\";\n          rgba = { r: color.r, g: color.g, b: color.b, a: alpha };\n        }\n      }\n    }\n\n    // set color\n    if (rgba === undefined) {\n      throw new Error(\n        \"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \" +\n          JSON.stringify(color),\n      );\n    } else {\n      this._setColor(rgba, setInitial);\n    }\n  }\n\n  /**\n   * this shows the color picker.\n   * The hue circle is constructed once and stored.\n   */\n  show() {\n    if (this.closeCallback !== undefined) {\n      this.closeCallback();\n      this.closeCallback = undefined;\n    }\n\n    this.applied = false;\n    this.frame.style.display = \"block\";\n    this._generateHueCircle();\n  }\n\n  // ------------------------------------------ PRIVATE ----------------------------- //\n\n  /**\n   * Hide the picker. Is called by the cancel button.\n   * Optional boolean to store the previous color for easy access later on.\n   * @param {boolean} [storePrevious]\n   * @private\n   */\n  _hide(storePrevious = true) {\n    // store the previous color for next time;\n    if (storePrevious === true) {\n      this.previousColor = Object.assign({}, this.color);\n    }\n\n    if (this.applied === true) {\n      this.updateCallback(this.initialColor);\n    }\n\n    this.frame.style.display = \"none\";\n\n    // call the closing callback, restoring the onclick method.\n    // this is in a setTimeout because it will trigger the show again before the click is done.\n    setTimeout(() => {\n      if (this.closeCallback !== undefined) {\n        this.closeCallback();\n        this.closeCallback = undefined;\n      }\n    }, 0);\n  }\n\n  /**\n   * bound to the save button. Saves and hides.\n   * @private\n   */\n  _save() {\n    this.updateCallback(this.color);\n    this.applied = false;\n    this._hide();\n  }\n\n  /**\n   * Bound to apply button. Saves but does not close. Is undone by the cancel button.\n   * @private\n   */\n  _apply() {\n    this.applied = true;\n    this.updateCallback(this.color);\n    this._updatePicker(this.color);\n  }\n\n  /**\n   * load the color from the previous session.\n   * @private\n   */\n  _loadLast() {\n    if (this.previousColor !== undefined) {\n      this.setColor(this.previousColor, false);\n    } else {\n      alert(\"There is no last color to load...\");\n    }\n  }\n\n  /**\n   * set the color, place the picker\n   * @param {object} rgba\n   * @param {boolean} [setInitial]\n   * @private\n   */\n  _setColor(rgba, setInitial = true) {\n    // store the initial color\n    if (setInitial === true) {\n      this.initialColor = Object.assign({}, rgba);\n    }\n\n    this.color = rgba;\n    const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n\n    const angleConvert = 2 * Math.PI;\n    const radius = this.r * hsv.s;\n    const x =\n      this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);\n    const y =\n      this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);\n\n    this.colorPickerSelector.style.left =\n      x - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n    this.colorPickerSelector.style.top =\n      y - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n\n    this._updatePicker(rgba);\n  }\n\n  /**\n   * bound to opacity control\n   * @param {number} value\n   * @private\n   */\n  _setOpacity(value) {\n    this.color.a = value / 100;\n    this._updatePicker(this.color);\n  }\n\n  /**\n   * bound to brightness control\n   * @param {number} value\n   * @private\n   */\n  _setBrightness(value) {\n    const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.v = value / 100;\n    const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba[\"a\"] = this.color.a;\n    this.color = rgba;\n    this._updatePicker();\n  }\n\n  /**\n   * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.\n   * @param {object} rgba\n   * @private\n   */\n  _updatePicker(rgba = this.color) {\n    const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n    const ctx = this.colorPickerCanvas.getContext(\"2d\");\n    if (this.pixelRation === undefined) {\n      this.pixelRatio =\n        (window.devicePixelRatio || 1) /\n        (ctx.webkitBackingStorePixelRatio ||\n          ctx.mozBackingStorePixelRatio ||\n          ctx.msBackingStorePixelRatio ||\n          ctx.oBackingStorePixelRatio ||\n          ctx.backingStorePixelRatio ||\n          1);\n    }\n    ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n    // clear the canvas\n    const w = this.colorPickerCanvas.clientWidth;\n    const h = this.colorPickerCanvas.clientHeight;\n    ctx.clearRect(0, 0, w, h);\n\n    ctx.putImageData(this.hueCircle, 0, 0);\n    ctx.fillStyle = \"rgba(0,0,0,\" + (1 - hsv.v) + \")\";\n    ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n    ctx.fill();\n\n    this.brightnessRange.value = 100 * hsv.v;\n    this.opacityRange.value = 100 * rgba.a;\n\n    this.initialColorDiv.style.backgroundColor =\n      \"rgba(\" +\n      this.initialColor.r +\n      \",\" +\n      this.initialColor.g +\n      \",\" +\n      this.initialColor.b +\n      \",\" +\n      this.initialColor.a +\n      \")\";\n    this.newColorDiv.style.backgroundColor =\n      \"rgba(\" +\n      this.color.r +\n      \",\" +\n      this.color.g +\n      \",\" +\n      this.color.b +\n      \",\" +\n      this.color.a +\n      \")\";\n  }\n\n  /**\n   * used by create to set the size of the canvas.\n   * @private\n   */\n  _setSize() {\n    this.colorPickerCanvas.style.width = \"100%\";\n    this.colorPickerCanvas.style.height = \"100%\";\n\n    this.colorPickerCanvas.width = 289 * this.pixelRatio;\n    this.colorPickerCanvas.height = 289 * this.pixelRatio;\n  }\n\n  /**\n   * create all dom elements\n   * TODO: cleanup, lots of similar dom elements\n   * @private\n   */\n  _create() {\n    this.frame = document.createElement(\"div\");\n    this.frame.className = \"vis-color-picker\";\n\n    this.colorPickerDiv = document.createElement(\"div\");\n    this.colorPickerSelector = document.createElement(\"div\");\n    this.colorPickerSelector.className = \"vis-selector\";\n    this.colorPickerDiv.appendChild(this.colorPickerSelector);\n\n    this.colorPickerCanvas = document.createElement(\"canvas\");\n    this.colorPickerDiv.appendChild(this.colorPickerCanvas);\n\n    if (!this.colorPickerCanvas.getContext) {\n      const noCanvas = document.createElement(\"DIV\");\n      noCanvas.style.color = \"red\";\n      noCanvas.style.fontWeight = \"bold\";\n      noCanvas.style.padding = \"10px\";\n      noCanvas.innerText = \"Error: your browser does not support HTML canvas\";\n      this.colorPickerCanvas.appendChild(noCanvas);\n    } else {\n      const ctx = this.colorPickerCanvas.getContext(\"2d\");\n      this.pixelRatio =\n        (window.devicePixelRatio || 1) /\n        (ctx.webkitBackingStorePixelRatio ||\n          ctx.mozBackingStorePixelRatio ||\n          ctx.msBackingStorePixelRatio ||\n          ctx.oBackingStorePixelRatio ||\n          ctx.backingStorePixelRatio ||\n          1);\n      this.colorPickerCanvas\n        .getContext(\"2d\")\n        .setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    }\n\n    this.colorPickerDiv.className = \"vis-color\";\n\n    this.opacityDiv = document.createElement(\"div\");\n    this.opacityDiv.className = \"vis-opacity\";\n\n    this.brightnessDiv = document.createElement(\"div\");\n    this.brightnessDiv.className = \"vis-brightness\";\n\n    this.arrowDiv = document.createElement(\"div\");\n    this.arrowDiv.className = \"vis-arrow\";\n\n    this.opacityRange = document.createElement(\"input\");\n    try {\n      this.opacityRange.type = \"range\"; // Not supported on IE9\n      this.opacityRange.min = \"0\";\n      this.opacityRange.max = \"100\";\n    } catch (err) {\n      // TODO: Add some error handling.\n    }\n    this.opacityRange.value = \"100\";\n    this.opacityRange.className = \"vis-range\";\n\n    this.brightnessRange = document.createElement(\"input\");\n    try {\n      this.brightnessRange.type = \"range\"; // Not supported on IE9\n      this.brightnessRange.min = \"0\";\n      this.brightnessRange.max = \"100\";\n    } catch (err) {\n      // TODO: Add some error handling.\n    }\n    this.brightnessRange.value = \"100\";\n    this.brightnessRange.className = \"vis-range\";\n\n    this.opacityDiv.appendChild(this.opacityRange);\n    this.brightnessDiv.appendChild(this.brightnessRange);\n\n    const me = this;\n    this.opacityRange.onchange = function () {\n      me._setOpacity(this.value);\n    };\n    this.opacityRange.oninput = function () {\n      me._setOpacity(this.value);\n    };\n    this.brightnessRange.onchange = function () {\n      me._setBrightness(this.value);\n    };\n    this.brightnessRange.oninput = function () {\n      me._setBrightness(this.value);\n    };\n\n    this.brightnessLabel = document.createElement(\"div\");\n    this.brightnessLabel.className = \"vis-label vis-brightness\";\n    this.brightnessLabel.innerText = \"brightness:\";\n\n    this.opacityLabel = document.createElement(\"div\");\n    this.opacityLabel.className = \"vis-label vis-opacity\";\n    this.opacityLabel.innerText = \"opacity:\";\n\n    this.newColorDiv = document.createElement(\"div\");\n    this.newColorDiv.className = \"vis-new-color\";\n    this.newColorDiv.innerText = \"new\";\n\n    this.initialColorDiv = document.createElement(\"div\");\n    this.initialColorDiv.className = \"vis-initial-color\";\n    this.initialColorDiv.innerText = \"initial\";\n\n    this.cancelButton = document.createElement(\"div\");\n    this.cancelButton.className = \"vis-button vis-cancel\";\n    this.cancelButton.innerText = \"cancel\";\n    this.cancelButton.onclick = this._hide.bind(this, false);\n\n    this.applyButton = document.createElement(\"div\");\n    this.applyButton.className = \"vis-button vis-apply\";\n    this.applyButton.innerText = \"apply\";\n    this.applyButton.onclick = this._apply.bind(this);\n\n    this.saveButton = document.createElement(\"div\");\n    this.saveButton.className = \"vis-button vis-save\";\n    this.saveButton.innerText = \"save\";\n    this.saveButton.onclick = this._save.bind(this);\n\n    this.loadButton = document.createElement(\"div\");\n    this.loadButton.className = \"vis-button vis-load\";\n    this.loadButton.innerText = \"load last\";\n    this.loadButton.onclick = this._loadLast.bind(this);\n\n    this.frame.appendChild(this.colorPickerDiv);\n    this.frame.appendChild(this.arrowDiv);\n    this.frame.appendChild(this.brightnessLabel);\n    this.frame.appendChild(this.brightnessDiv);\n    this.frame.appendChild(this.opacityLabel);\n    this.frame.appendChild(this.opacityDiv);\n    this.frame.appendChild(this.newColorDiv);\n    this.frame.appendChild(this.initialColorDiv);\n\n    this.frame.appendChild(this.cancelButton);\n    this.frame.appendChild(this.applyButton);\n    this.frame.appendChild(this.saveButton);\n    this.frame.appendChild(this.loadButton);\n  }\n\n  /**\n   * bind hammer to the color picker\n   * @private\n   */\n  _bindHammer() {\n    this.drag = {};\n    this.pinch = {};\n    this.hammer = new Hammer$1(this.colorPickerCanvas);\n    this.hammer.get(\"pinch\").set({ enable: true });\n\n    this.hammer.on(\"hammer.input\", (event) => {\n      if (event.isFirst) {\n        this._moveSelector(event);\n      }\n    });\n    this.hammer.on(\"tap\", (event) => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panstart\", (event) => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panmove\", (event) => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panend\", (event) => {\n      this._moveSelector(event);\n    });\n  }\n\n  /**\n   * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.\n   * @private\n   */\n  _generateHueCircle() {\n    if (this.generated === false) {\n      const ctx = this.colorPickerCanvas.getContext(\"2d\");\n      if (this.pixelRation === undefined) {\n        this.pixelRatio =\n          (window.devicePixelRatio || 1) /\n          (ctx.webkitBackingStorePixelRatio ||\n            ctx.mozBackingStorePixelRatio ||\n            ctx.msBackingStorePixelRatio ||\n            ctx.oBackingStorePixelRatio ||\n            ctx.backingStorePixelRatio ||\n            1);\n      }\n      ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n      // clear the canvas\n      const w = this.colorPickerCanvas.clientWidth;\n      const h = this.colorPickerCanvas.clientHeight;\n      ctx.clearRect(0, 0, w, h);\n\n      // draw hue circle\n      let x, y, hue, sat;\n      this.centerCoordinates = { x: w * 0.5, y: h * 0.5 };\n      this.r = 0.49 * w;\n      const angleConvert = (2 * Math.PI) / 360;\n      const hfac = 1 / 360;\n      const sfac = 1 / this.r;\n      let rgb;\n      for (hue = 0; hue < 360; hue++) {\n        for (sat = 0; sat < this.r; sat++) {\n          x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);\n          y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);\n          rgb = HSVToRGB(hue * hfac, sat * sfac, 1);\n          ctx.fillStyle = \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\";\n          ctx.fillRect(x - 0.5, y - 0.5, 2, 2);\n        }\n      }\n      ctx.strokeStyle = \"rgba(0,0,0,1)\";\n      ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n      ctx.stroke();\n\n      this.hueCircle = ctx.getImageData(0, 0, w, h);\n    }\n    this.generated = true;\n  }\n\n  /**\n   * move the selector. This is called by hammer functions.\n   * @param {Event}  event   The event\n   * @private\n   */\n  _moveSelector(event) {\n    const rect = this.colorPickerDiv.getBoundingClientRect();\n    const left = event.center.x - rect.left;\n    const top = event.center.y - rect.top;\n\n    const centerY = 0.5 * this.colorPickerDiv.clientHeight;\n    const centerX = 0.5 * this.colorPickerDiv.clientWidth;\n\n    const x = left - centerX;\n    const y = top - centerY;\n\n    const angle = Math.atan2(x, y);\n    const radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);\n\n    const newTop = Math.cos(angle) * radius + centerY;\n    const newLeft = Math.sin(angle) * radius + centerX;\n\n    this.colorPickerSelector.style.top =\n      newTop - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n    this.colorPickerSelector.style.left =\n      newLeft - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n\n    // set color\n    let h = angle / (2 * Math.PI);\n    h = h < 0 ? h + 1 : h;\n    const s = radius / this.r;\n    const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.h = h;\n    hsv.s = s;\n    const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba[\"a\"] = this.color.a;\n    this.color = rgba;\n\n    // update previews\n    this.initialColorDiv.style.backgroundColor =\n      \"rgba(\" +\n      this.initialColor.r +\n      \",\" +\n      this.initialColor.g +\n      \",\" +\n      this.initialColor.b +\n      \",\" +\n      this.initialColor.a +\n      \")\";\n    this.newColorDiv.style.backgroundColor =\n      \"rgba(\" +\n      this.color.r +\n      \",\" +\n      this.color.g +\n      \",\" +\n      this.color.b +\n      \",\" +\n      this.color.a +\n      \")\";\n  }\n};\n\n/**\n * Wrap given text (last argument) in HTML elements (all preceding arguments).\n * @param {...any} rest - List of tag names followed by inner text.\n * @returns An element or a text node.\n */\nfunction wrapInTag(...rest) {\n  if (rest.length < 1) {\n    throw new TypeError(\"Invalid arguments.\");\n  } else if (rest.length === 1) {\n    return document.createTextNode(rest[0]);\n  } else {\n    const element = document.createElement(rest[0]);\n    element.appendChild(wrapInTag(...rest.slice(1)));\n    return element;\n  }\n}\n\n/**\n * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.\n * Boolean options are recognised as Boolean\n * Number options should be written as array: [default value, min value, max value, stepsize]\n * Colors should be written as array: ['color', '#ffffff']\n * Strings with should be written as array: [option1, option2, option3, ..]\n *\n * The options are matched with their counterparts in each of the modules and the values used in the configuration are\n */\nlet Configurator$1 = class Configurator {\n  /**\n   * @param {object} parentModule        | the location where parentModule.setOptions() can be called\n   * @param {object} defaultContainer    | the default container of the module\n   * @param {object} configureOptions    | the fully configured and predefined options set found in allOptions.js\n   * @param {number} pixelRatio          | canvas pixel ratio\n   * @param {Function} hideOption        | custom logic to dynamically hide options\n   */\n  constructor(\n    parentModule,\n    defaultContainer,\n    configureOptions,\n    pixelRatio = 1,\n    hideOption = () => false,\n  ) {\n    this.parent = parentModule;\n    this.changedOptions = [];\n    this.container = defaultContainer;\n    this.allowCreation = false;\n    this.hideOption = hideOption;\n\n    this.options = {};\n    this.initialized = false;\n    this.popupCounter = 0;\n    this.defaultOptions = {\n      enabled: false,\n      filter: true,\n      container: undefined,\n      showButton: true,\n    };\n    Object.assign(this.options, this.defaultOptions);\n\n    this.configureOptions = configureOptions;\n    this.moduleOptions = {};\n    this.domElements = [];\n    this.popupDiv = {};\n    this.popupLimit = 5;\n    this.popupHistory = {};\n    this.colorPicker = new ColorPicker$1(pixelRatio);\n    this.wrapper = undefined;\n  }\n\n  /**\n   * refresh all options.\n   * Because all modules parse their options by themselves, we just use their options. We copy them here.\n   * @param {object} options\n   */\n  setOptions(options) {\n    if (options !== undefined) {\n      // reset the popup history because the indices may have been changed.\n      this.popupHistory = {};\n      this._removePopup();\n\n      let enabled = true;\n      if (typeof options === \"string\") {\n        this.options.filter = options;\n      } else if (Array.isArray(options)) {\n        this.options.filter = options.join();\n      } else if (typeof options === \"object\") {\n        if (options == null) {\n          throw new TypeError(\"options cannot be null\");\n        }\n        if (options.container !== undefined) {\n          this.options.container = options.container;\n        }\n        if (options.filter !== undefined) {\n          this.options.filter = options.filter;\n        }\n        if (options.showButton !== undefined) {\n          this.options.showButton = options.showButton;\n        }\n        if (options.enabled !== undefined) {\n          enabled = options.enabled;\n        }\n      } else if (typeof options === \"boolean\") {\n        this.options.filter = true;\n        enabled = options;\n      } else if (typeof options === \"function\") {\n        this.options.filter = options;\n        enabled = true;\n      }\n      if (this.options.filter === false) {\n        enabled = false;\n      }\n\n      this.options.enabled = enabled;\n    }\n    this._clean();\n  }\n\n  /**\n   *\n   * @param {object} moduleOptions\n   */\n  setModuleOptions(moduleOptions) {\n    this.moduleOptions = moduleOptions;\n    if (this.options.enabled === true) {\n      this._clean();\n      if (this.options.container !== undefined) {\n        this.container = this.options.container;\n      }\n      this._create();\n    }\n  }\n\n  /**\n   * Create all DOM elements\n   * @private\n   */\n  _create() {\n    this._clean();\n    this.changedOptions = [];\n\n    const filter = this.options.filter;\n    let counter = 0;\n    let show = false;\n    for (const option in this.configureOptions) {\n      if (Object.prototype.hasOwnProperty.call(this.configureOptions, option)) {\n        this.allowCreation = false;\n        show = false;\n        if (typeof filter === \"function\") {\n          show = filter(option, []);\n          show =\n            show ||\n            this._handleObject(this.configureOptions[option], [option], true);\n        } else if (filter === true || filter.indexOf(option) !== -1) {\n          show = true;\n        }\n\n        if (show !== false) {\n          this.allowCreation = true;\n\n          // linebreak between categories\n          if (counter > 0) {\n            this._makeItem([]);\n          }\n          // a header for the category\n          this._makeHeader(option);\n\n          // get the sub options\n          this._handleObject(this.configureOptions[option], [option]);\n        }\n        counter++;\n      }\n    }\n    this._makeButton();\n    this._push();\n    //~ this.colorPicker.insertTo(this.container);\n  }\n\n  /**\n   * draw all DOM elements on the screen\n   * @private\n   */\n  _push() {\n    this.wrapper = document.createElement(\"div\");\n    this.wrapper.className = \"vis-configuration-wrapper\";\n    this.container.appendChild(this.wrapper);\n    for (let i = 0; i < this.domElements.length; i++) {\n      this.wrapper.appendChild(this.domElements[i]);\n    }\n\n    this._showPopupIfNeeded();\n  }\n\n  /**\n   * delete all DOM elements\n   * @private\n   */\n  _clean() {\n    for (let i = 0; i < this.domElements.length; i++) {\n      this.wrapper.removeChild(this.domElements[i]);\n    }\n\n    if (this.wrapper !== undefined) {\n      this.container.removeChild(this.wrapper);\n      this.wrapper = undefined;\n    }\n    this.domElements = [];\n\n    this._removePopup();\n  }\n\n  /**\n   * get the value from the actualOptions if it exists\n   * @param {Array} path    | where to look for the actual option\n   * @returns {*}\n   * @private\n   */\n  _getValue(path) {\n    let base = this.moduleOptions;\n    for (let i = 0; i < path.length; i++) {\n      if (base[path[i]] !== undefined) {\n        base = base[path[i]];\n      } else {\n        base = undefined;\n        break;\n      }\n    }\n    return base;\n  }\n\n  /**\n   * all option elements are wrapped in an item\n   * @param {Array} path    | where to look for the actual option\n   * @param {Array.<Element>} domElements\n   * @returns {number}\n   * @private\n   */\n  _makeItem(path, ...domElements) {\n    if (this.allowCreation === true) {\n      const item = document.createElement(\"div\");\n      item.className =\n        \"vis-configuration vis-config-item vis-config-s\" + path.length;\n      domElements.forEach((element) => {\n        item.appendChild(element);\n      });\n      this.domElements.push(item);\n      return this.domElements.length;\n    }\n    return 0;\n  }\n\n  /**\n   * header for major subjects\n   * @param {string} name\n   * @private\n   */\n  _makeHeader(name) {\n    const div = document.createElement(\"div\");\n    div.className = \"vis-configuration vis-config-header\";\n    div.innerText = name;\n    this._makeItem([], div);\n  }\n\n  /**\n   * make a label, if it is an object label, it gets different styling.\n   * @param {string} name\n   * @param {Array} path    | where to look for the actual option\n   * @param {string} objectLabel\n   * @returns {HTMLElement}\n   * @private\n   */\n  _makeLabel(name, path, objectLabel = false) {\n    const div = document.createElement(\"div\");\n    div.className =\n      \"vis-configuration vis-config-label vis-config-s\" + path.length;\n    if (objectLabel === true) {\n      while (div.firstChild) {\n        div.removeChild(div.firstChild);\n      }\n      div.appendChild(wrapInTag(\"i\", \"b\", name));\n    } else {\n      div.innerText = name + \":\";\n    }\n    return div;\n  }\n\n  /**\n   * make a dropdown list for multiple possible string optoins\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _makeDropdown(arr, value, path) {\n    const select = document.createElement(\"select\");\n    select.className = \"vis-configuration vis-config-select\";\n    let selectedValue = 0;\n    if (value !== undefined) {\n      if (arr.indexOf(value) !== -1) {\n        selectedValue = arr.indexOf(value);\n      }\n    }\n\n    for (let i = 0; i < arr.length; i++) {\n      const option = document.createElement(\"option\");\n      option.value = arr[i];\n      if (i === selectedValue) {\n        option.selected = \"selected\";\n      }\n      option.innerText = arr[i];\n      select.appendChild(option);\n    }\n\n    const me = this;\n    select.onchange = function () {\n      me._update(this.value, path);\n    };\n\n    const label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, select);\n  }\n\n  /**\n   * make a range object for numeric options\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _makeRange(arr, value, path) {\n    const defaultValue = arr[0];\n    const min = arr[1];\n    const max = arr[2];\n    const step = arr[3];\n    const range = document.createElement(\"input\");\n    range.className = \"vis-configuration vis-config-range\";\n    try {\n      range.type = \"range\"; // not supported on IE9\n      range.min = min;\n      range.max = max;\n    } catch (err) {\n      // TODO: Add some error handling.\n    }\n    range.step = step;\n\n    // set up the popup settings in case they are needed.\n    let popupString = \"\";\n    let popupValue = 0;\n\n    if (value !== undefined) {\n      const factor = 1.2;\n      if (value < 0 && value * factor < min) {\n        range.min = Math.ceil(value * factor);\n        popupValue = range.min;\n        popupString = \"range increased\";\n      } else if (value / factor < min) {\n        range.min = Math.ceil(value / factor);\n        popupValue = range.min;\n        popupString = \"range increased\";\n      }\n      if (value * factor > max && max !== 1) {\n        range.max = Math.ceil(value * factor);\n        popupValue = range.max;\n        popupString = \"range increased\";\n      }\n      range.value = value;\n    } else {\n      range.value = defaultValue;\n    }\n\n    const input = document.createElement(\"input\");\n    input.className = \"vis-configuration vis-config-rangeinput\";\n    input.value = range.value;\n\n    const me = this;\n    range.onchange = function () {\n      input.value = this.value;\n      me._update(Number(this.value), path);\n    };\n    range.oninput = function () {\n      input.value = this.value;\n    };\n\n    const label = this._makeLabel(path[path.length - 1], path);\n    const itemIndex = this._makeItem(path, label, range, input);\n\n    // if a popup is needed AND it has not been shown for this value, show it.\n    if (popupString !== \"\" && this.popupHistory[itemIndex] !== popupValue) {\n      this.popupHistory[itemIndex] = popupValue;\n      this._setupPopup(popupString, itemIndex);\n    }\n  }\n\n  /**\n   * make a button object\n   * @private\n   */\n  _makeButton() {\n    if (this.options.showButton === true) {\n      const generateButton = document.createElement(\"div\");\n      generateButton.className = \"vis-configuration vis-config-button\";\n      generateButton.innerText = \"generate options\";\n      generateButton.onclick = () => {\n        this._printOptions();\n      };\n      generateButton.onmouseover = () => {\n        generateButton.className = \"vis-configuration vis-config-button hover\";\n      };\n      generateButton.onmouseout = () => {\n        generateButton.className = \"vis-configuration vis-config-button\";\n      };\n\n      this.optionsContainer = document.createElement(\"div\");\n      this.optionsContainer.className =\n        \"vis-configuration vis-config-option-container\";\n\n      this.domElements.push(this.optionsContainer);\n      this.domElements.push(generateButton);\n    }\n  }\n\n  /**\n   * prepare the popup\n   * @param {string} string\n   * @param {number} index\n   * @private\n   */\n  _setupPopup(string, index) {\n    if (\n      this.initialized === true &&\n      this.allowCreation === true &&\n      this.popupCounter < this.popupLimit\n    ) {\n      const div = document.createElement(\"div\");\n      div.id = \"vis-configuration-popup\";\n      div.className = \"vis-configuration-popup\";\n      div.innerText = string;\n      div.onclick = () => {\n        this._removePopup();\n      };\n      this.popupCounter += 1;\n      this.popupDiv = { html: div, index: index };\n    }\n  }\n\n  /**\n   * remove the popup from the dom\n   * @private\n   */\n  _removePopup() {\n    if (this.popupDiv.html !== undefined) {\n      this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);\n      clearTimeout(this.popupDiv.hideTimeout);\n      clearTimeout(this.popupDiv.deleteTimeout);\n      this.popupDiv = {};\n    }\n  }\n\n  /**\n   * Show the popup if it is needed.\n   * @private\n   */\n  _showPopupIfNeeded() {\n    if (this.popupDiv.html !== undefined) {\n      const correspondingElement = this.domElements[this.popupDiv.index];\n      const rect = correspondingElement.getBoundingClientRect();\n      this.popupDiv.html.style.left = rect.left + \"px\";\n      this.popupDiv.html.style.top = rect.top - 30 + \"px\"; // 30 is the height;\n      document.body.appendChild(this.popupDiv.html);\n      this.popupDiv.hideTimeout = setTimeout(() => {\n        this.popupDiv.html.style.opacity = 0;\n      }, 1500);\n      this.popupDiv.deleteTimeout = setTimeout(() => {\n        this._removePopup();\n      }, 1800);\n    }\n  }\n\n  /**\n   * make a checkbox for boolean options.\n   * @param {number} defaultValue\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _makeCheckbox(defaultValue, value, path) {\n    const checkbox = document.createElement(\"input\");\n    checkbox.type = \"checkbox\";\n    checkbox.className = \"vis-configuration vis-config-checkbox\";\n    checkbox.checked = defaultValue;\n    if (value !== undefined) {\n      checkbox.checked = value;\n      if (value !== defaultValue) {\n        if (typeof defaultValue === \"object\") {\n          if (value !== defaultValue.enabled) {\n            this.changedOptions.push({ path: path, value: value });\n          }\n        } else {\n          this.changedOptions.push({ path: path, value: value });\n        }\n      }\n    }\n\n    const me = this;\n    checkbox.onchange = function () {\n      me._update(this.checked, path);\n    };\n\n    const label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n  /**\n   * make a text input field for string options.\n   * @param {number} defaultValue\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _makeTextInput(defaultValue, value, path) {\n    const checkbox = document.createElement(\"input\");\n    checkbox.type = \"text\";\n    checkbox.className = \"vis-configuration vis-config-text\";\n    checkbox.value = value;\n    if (value !== defaultValue) {\n      this.changedOptions.push({ path: path, value: value });\n    }\n\n    const me = this;\n    checkbox.onchange = function () {\n      me._update(this.value, path);\n    };\n\n    const label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n  /**\n   * make a color field with a color picker for color fields\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _makeColorField(arr, value, path) {\n    const defaultColor = arr[1];\n    const div = document.createElement(\"div\");\n    value = value === undefined ? defaultColor : value;\n\n    if (value !== \"none\") {\n      div.className = \"vis-configuration vis-config-colorBlock\";\n      div.style.backgroundColor = value;\n    } else {\n      div.className = \"vis-configuration vis-config-colorBlock none\";\n    }\n\n    value = value === undefined ? defaultColor : value;\n    div.onclick = () => {\n      this._showColorPicker(value, div, path);\n    };\n\n    const label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, div);\n  }\n\n  /**\n   * used by the color buttons to call the color picker.\n   * @param {number} value\n   * @param {HTMLElement} div\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _showColorPicker(value, div, path) {\n    // clear the callback from this div\n    div.onclick = function () {};\n\n    this.colorPicker.insertTo(div);\n    this.colorPicker.show();\n\n    this.colorPicker.setColor(value);\n    this.colorPicker.setUpdateCallback((color) => {\n      const colorString =\n        \"rgba(\" + color.r + \",\" + color.g + \",\" + color.b + \",\" + color.a + \")\";\n      div.style.backgroundColor = colorString;\n      this._update(colorString, path);\n    });\n\n    // on close of the colorpicker, restore the callback.\n    this.colorPicker.setCloseCallback(() => {\n      div.onclick = () => {\n        this._showColorPicker(value, div, path);\n      };\n    });\n  }\n\n  /**\n   * parse an object and draw the correct items\n   * @param {object} obj\n   * @param {Array} [path]    | where to look for the actual option\n   * @param {boolean} [checkOnly]\n   * @returns {boolean}\n   * @private\n   */\n  _handleObject(obj, path = [], checkOnly = false) {\n    let show = false;\n    const filter = this.options.filter;\n    let visibleInSet = false;\n    for (const subObj in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, subObj)) {\n        show = true;\n        const item = obj[subObj];\n        const newPath = copyAndExtendArray(path, subObj);\n        if (typeof filter === \"function\") {\n          show = filter(subObj, path);\n\n          // if needed we must go deeper into the object.\n          if (show === false) {\n            if (\n              !Array.isArray(item) &&\n              typeof item !== \"string\" &&\n              typeof item !== \"boolean\" &&\n              item instanceof Object\n            ) {\n              this.allowCreation = false;\n              show = this._handleObject(item, newPath, true);\n              this.allowCreation = checkOnly === false;\n            }\n          }\n        }\n\n        if (show !== false) {\n          visibleInSet = true;\n          const value = this._getValue(newPath);\n\n          if (Array.isArray(item)) {\n            this._handleArray(item, value, newPath);\n          } else if (typeof item === \"string\") {\n            this._makeTextInput(item, value, newPath);\n          } else if (typeof item === \"boolean\") {\n            this._makeCheckbox(item, value, newPath);\n          } else if (item instanceof Object) {\n            // skip the options that are not enabled\n            if (!this.hideOption(path, subObj, this.moduleOptions)) {\n              // initially collapse options with an disabled enabled option.\n              if (item.enabled !== undefined) {\n                const enabledPath = copyAndExtendArray(newPath, \"enabled\");\n                const enabledValue = this._getValue(enabledPath);\n                if (enabledValue === true) {\n                  const label = this._makeLabel(subObj, newPath, true);\n                  this._makeItem(newPath, label);\n                  visibleInSet =\n                    this._handleObject(item, newPath) || visibleInSet;\n                } else {\n                  this._makeCheckbox(item, enabledValue, newPath);\n                }\n              } else {\n                const label = this._makeLabel(subObj, newPath, true);\n                this._makeItem(newPath, label);\n                visibleInSet =\n                  this._handleObject(item, newPath) || visibleInSet;\n              }\n            }\n          } else {\n            console.error(\"dont know how to handle\", item, subObj, newPath);\n          }\n        }\n      }\n    }\n    return visibleInSet;\n  }\n\n  /**\n   * handle the array type of option\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _handleArray(arr, value, path) {\n    if (typeof arr[0] === \"string\" && arr[0] === \"color\") {\n      this._makeColorField(arr, value, path);\n      if (arr[1] !== value) {\n        this.changedOptions.push({ path: path, value: value });\n      }\n    } else if (typeof arr[0] === \"string\") {\n      this._makeDropdown(arr, value, path);\n      if (arr[0] !== value) {\n        this.changedOptions.push({ path: path, value: value });\n      }\n    } else if (typeof arr[0] === \"number\") {\n      this._makeRange(arr, value, path);\n      if (arr[0] !== value) {\n        this.changedOptions.push({ path: path, value: Number(value) });\n      }\n    }\n  }\n\n  /**\n   * called to update the network with the new settings.\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _update(value, path) {\n    const options = this._constructOptions(value, path);\n\n    if (\n      this.parent.body &&\n      this.parent.body.emitter &&\n      this.parent.body.emitter.emit\n    ) {\n      this.parent.body.emitter.emit(\"configChange\", options);\n    }\n    this.initialized = true;\n    this.parent.setOptions(options);\n  }\n\n  /**\n   *\n   * @param {string | boolean} value\n   * @param {Array.<string>} path\n   * @param {{}} optionsObj\n   * @returns {{}}\n   * @private\n   */\n  _constructOptions(value, path, optionsObj = {}) {\n    let pointer = optionsObj;\n\n    // when dropdown boxes can be string or boolean, we typecast it into correct types\n    value = value === \"true\" ? true : value;\n    value = value === \"false\" ? false : value;\n\n    for (let i = 0; i < path.length; i++) {\n      if (path[i] !== \"global\") {\n        if (pointer[path[i]] === undefined) {\n          pointer[path[i]] = {};\n        }\n        if (i !== path.length - 1) {\n          pointer = pointer[path[i]];\n        } else {\n          pointer[path[i]] = value;\n        }\n      }\n    }\n    return optionsObj;\n  }\n\n  /**\n   * @private\n   */\n  _printOptions() {\n    const options = this.getOptions();\n\n    while (this.optionsContainer.firstChild) {\n      this.optionsContainer.removeChild(this.optionsContainer.firstChild);\n    }\n    this.optionsContainer.appendChild(\n      wrapInTag(\"pre\", \"const options = \" + JSON.stringify(options, null, 2)),\n    );\n  }\n\n  /**\n   *\n   * @returns {{}} options\n   */\n  getOptions() {\n    const options = {};\n    for (let i = 0; i < this.changedOptions.length; i++) {\n      this._constructOptions(\n        this.changedOptions[i].value,\n        this.changedOptions[i].path,\n        options,\n      );\n    }\n    return options;\n  }\n};\n\n/**\n * Popup is a class to create a popup window with some text\n */\nlet Popup$1 = class Popup {\n  /**\n   * @param {Element} container       The container object.\n   * @param {string}  overflowMethod  How the popup should act to overflowing ('flip' or 'cap')\n   */\n  constructor(container, overflowMethod) {\n    this.container = container;\n    this.overflowMethod = overflowMethod || \"cap\";\n\n    this.x = 0;\n    this.y = 0;\n    this.padding = 5;\n    this.hidden = false;\n\n    // create the frame\n    this.frame = document.createElement(\"div\");\n    this.frame.className = \"vis-tooltip\";\n    this.container.appendChild(this.frame);\n  }\n\n  /**\n   * @param {number} x   Horizontal position of the popup window\n   * @param {number} y   Vertical position of the popup window\n   */\n  setPosition(x, y) {\n    this.x = parseInt(x);\n    this.y = parseInt(y);\n  }\n\n  /**\n   * Set the content for the popup window. This can be HTML code or text.\n   * @param {string | Element} content\n   */\n  setText(content) {\n    if (content instanceof Element) {\n      while (this.frame.firstChild) {\n        this.frame.removeChild(this.frame.firstChild);\n      }\n      this.frame.appendChild(content);\n    } else {\n      // String containing literal text, element has to be used for HTML due to\n      // XSS risks associated with innerHTML (i.e. prevent XSS by accident).\n      this.frame.innerText = content;\n    }\n  }\n\n  /**\n   * Show the popup window\n   * @param {boolean} [doShow]    Show or hide the window\n   */\n  show(doShow) {\n    if (doShow === undefined) {\n      doShow = true;\n    }\n\n    if (doShow === true) {\n      const height = this.frame.clientHeight;\n      const width = this.frame.clientWidth;\n      const maxHeight = this.frame.parentNode.clientHeight;\n      const maxWidth = this.frame.parentNode.clientWidth;\n\n      let left = 0,\n        top = 0;\n\n      if (this.overflowMethod == \"flip\") {\n        let isLeft = false,\n          isTop = true; // Where around the position it's located\n\n        if (this.y - height < this.padding) {\n          isTop = false;\n        }\n\n        if (this.x + width > maxWidth - this.padding) {\n          isLeft = true;\n        }\n\n        if (isLeft) {\n          left = this.x - width;\n        } else {\n          left = this.x;\n        }\n\n        if (isTop) {\n          top = this.y - height;\n        } else {\n          top = this.y;\n        }\n      } else {\n        top = this.y - height;\n        if (top + height + this.padding > maxHeight) {\n          top = maxHeight - height - this.padding;\n        }\n        if (top < this.padding) {\n          top = this.padding;\n        }\n\n        left = this.x;\n        if (left + width + this.padding > maxWidth) {\n          left = maxWidth - width - this.padding;\n        }\n        if (left < this.padding) {\n          left = this.padding;\n        }\n      }\n\n      this.frame.style.left = left + \"px\";\n      this.frame.style.top = top + \"px\";\n      this.frame.style.visibility = \"visible\";\n      this.hidden = false;\n    } else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Hide the popup window\n   */\n  hide() {\n    this.hidden = true;\n    this.frame.style.left = \"0\";\n    this.frame.style.top = \"0\";\n    this.frame.style.visibility = \"hidden\";\n  }\n\n  /**\n   * Remove the popup window\n   */\n  destroy() {\n    this.frame.parentNode.removeChild(this.frame); // Remove element from DOM\n  }\n};\n\nlet errorFound = false;\nlet allOptions;\n\nconst VALIDATOR_PRINT_STYLE$1 = \"background: #FFeeee; color: #dd0000\";\n\n/**\n *  Used to validate options.\n */\nlet Validator$1 = class Validator {\n  /**\n   * Main function to be called\n   * @param {object} options\n   * @param {object} referenceOptions\n   * @param {object} subObject\n   * @returns {boolean}\n   * @static\n   */\n  static validate(options, referenceOptions, subObject) {\n    errorFound = false;\n    allOptions = referenceOptions;\n    let usedOptions = referenceOptions;\n    if (subObject !== undefined) {\n      usedOptions = referenceOptions[subObject];\n    }\n    Validator.parse(options, usedOptions, []);\n    return errorFound;\n  }\n\n  /**\n   * Will traverse an object recursively and check every value\n   * @param {object} options\n   * @param {object} referenceOptions\n   * @param {Array} path    | where to look for the actual option\n   * @static\n   */\n  static parse(options, referenceOptions, path) {\n    for (const option in options) {\n      if (Object.prototype.hasOwnProperty.call(options, option)) {\n        Validator.check(option, options, referenceOptions, path);\n      }\n    }\n  }\n\n  /**\n   * Check every value. If the value is an object, call the parse function on that object.\n   * @param {string} option\n   * @param {object} options\n   * @param {object} referenceOptions\n   * @param {Array} path    | where to look for the actual option\n   * @static\n   */\n  static check(option, options, referenceOptions, path) {\n    if (\n      referenceOptions[option] === undefined &&\n      referenceOptions.__any__ === undefined\n    ) {\n      Validator.getSuggestion(option, referenceOptions, path);\n      return;\n    }\n\n    let referenceOption = option;\n    let is_object = true;\n\n    if (\n      referenceOptions[option] === undefined &&\n      referenceOptions.__any__ !== undefined\n    ) {\n      // NOTE: This only triggers if the __any__ is in the top level of the options object.\n      //       THAT'S A REALLY BAD PLACE TO ALLOW IT!!!!\n      // TODO: Examine if needed, remove if possible\n\n      // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.\n      referenceOption = \"__any__\";\n\n      // if the any-subgroup is not a predefined object in the configurator,\n      // we do not look deeper into the object.\n      is_object = Validator.getType(options[option]) === \"object\";\n    }\n\n    let refOptionObj = referenceOptions[referenceOption];\n    if (is_object && refOptionObj.__type__ !== undefined) {\n      refOptionObj = refOptionObj.__type__;\n    }\n\n    Validator.checkFields(\n      option,\n      options,\n      referenceOptions,\n      referenceOption,\n      refOptionObj,\n      path,\n    );\n  }\n\n  /**\n   *\n   * @param {string}  option           | the option property\n   * @param {object}  options          | The supplied options object\n   * @param {object}  referenceOptions | The reference options containing all options and their allowed formats\n   * @param {string}  referenceOption  | Usually this is the same as option, except when handling an __any__ tag.\n   * @param {string}  refOptionObj     | This is the type object from the reference options\n   * @param {Array}   path             | where in the object is the option\n   * @static\n   */\n  static checkFields(\n    option,\n    options,\n    referenceOptions,\n    referenceOption,\n    refOptionObj,\n    path,\n  ) {\n    const log = function (message) {\n      console.error(\n        \"%c\" + message + Validator.printLocation(path, option),\n        VALIDATOR_PRINT_STYLE$1,\n      );\n    };\n\n    const optionType = Validator.getType(options[option]);\n    const refOptionType = refOptionObj[optionType];\n\n    if (refOptionType !== undefined) {\n      // if the type is correct, we check if it is supposed to be one of a few select values\n      if (\n        Validator.getType(refOptionType) === \"array\" &&\n        refOptionType.indexOf(options[option]) === -1\n      ) {\n        log(\n          'Invalid option detected in \"' +\n            option +\n            '\".' +\n            \" Allowed values are:\" +\n            Validator.print(refOptionType) +\n            ' not \"' +\n            options[option] +\n            '\". ',\n        );\n        errorFound = true;\n      } else if (optionType === \"object\" && referenceOption !== \"__any__\") {\n        path = copyAndExtendArray(path, option);\n        Validator.parse(\n          options[option],\n          referenceOptions[referenceOption],\n          path,\n        );\n      }\n    } else if (refOptionObj[\"any\"] === undefined) {\n      // type of the field is incorrect and the field cannot be any\n      log(\n        'Invalid type received for \"' +\n          option +\n          '\". Expected: ' +\n          Validator.print(Object.keys(refOptionObj)) +\n          \". Received [\" +\n          optionType +\n          '] \"' +\n          options[option] +\n          '\"',\n      );\n      errorFound = true;\n    }\n  }\n\n  /**\n   *\n   * @param {object | boolean | number | string | Array.<number> | Date | Node | Moment | undefined | null} object\n   * @returns {string}\n   * @static\n   */\n  static getType(object) {\n    const type = typeof object;\n\n    if (type === \"object\") {\n      if (object === null) {\n        return \"null\";\n      }\n      if (object instanceof Boolean) {\n        return \"boolean\";\n      }\n      if (object instanceof Number) {\n        return \"number\";\n      }\n      if (object instanceof String) {\n        return \"string\";\n      }\n      if (Array.isArray(object)) {\n        return \"array\";\n      }\n      if (object instanceof Date) {\n        return \"date\";\n      }\n      if (object.nodeType !== undefined) {\n        return \"dom\";\n      }\n      if (object._isAMomentObject === true) {\n        return \"moment\";\n      }\n      return \"object\";\n    } else if (type === \"number\") {\n      return \"number\";\n    } else if (type === \"boolean\") {\n      return \"boolean\";\n    } else if (type === \"string\") {\n      return \"string\";\n    } else if (type === undefined) {\n      return \"undefined\";\n    }\n    return type;\n  }\n\n  /**\n   * @param {string} option\n   * @param {object} options\n   * @param {Array.<string>} path\n   * @static\n   */\n  static getSuggestion(option, options, path) {\n    const localSearch = Validator.findInOptions(option, options, path, false);\n    const globalSearch = Validator.findInOptions(option, allOptions, [], true);\n\n    const localSearchThreshold = 8;\n    const globalSearchThreshold = 4;\n\n    let msg;\n    if (localSearch.indexMatch !== undefined) {\n      msg =\n        \" in \" +\n        Validator.printLocation(localSearch.path, option, \"\") +\n        'Perhaps it was incomplete? Did you mean: \"' +\n        localSearch.indexMatch +\n        '\"?\\n\\n';\n    } else if (\n      globalSearch.distance <= globalSearchThreshold &&\n      localSearch.distance > globalSearch.distance\n    ) {\n      msg =\n        \" in \" +\n        Validator.printLocation(localSearch.path, option, \"\") +\n        \"Perhaps it was misplaced? Matching option found at: \" +\n        Validator.printLocation(\n          globalSearch.path,\n          globalSearch.closestMatch,\n          \"\",\n        );\n    } else if (localSearch.distance <= localSearchThreshold) {\n      msg =\n        '. Did you mean \"' +\n        localSearch.closestMatch +\n        '\"?' +\n        Validator.printLocation(localSearch.path, option);\n    } else {\n      msg =\n        \". Did you mean one of these: \" +\n        Validator.print(Object.keys(options)) +\n        Validator.printLocation(path, option);\n    }\n\n    console.error(\n      '%cUnknown option detected: \"' + option + '\"' + msg,\n      VALIDATOR_PRINT_STYLE$1,\n    );\n    errorFound = true;\n  }\n\n  /**\n   * traverse the options in search for a match.\n   * @param {string} option\n   * @param {object} options\n   * @param {Array} path    | where to look for the actual option\n   * @param {boolean} [recursive]\n   * @returns {{closestMatch: string, path: Array, distance: number}}\n   * @static\n   */\n  static findInOptions(option, options, path, recursive = false) {\n    let min = 1e9;\n    let closestMatch = \"\";\n    let closestMatchPath = [];\n    const lowerCaseOption = option.toLowerCase();\n    let indexMatch = undefined;\n    for (const op in options) {\n      let distance;\n      if (options[op].__type__ !== undefined && recursive === true) {\n        const result = Validator.findInOptions(\n          option,\n          options[op],\n          copyAndExtendArray(path, op),\n        );\n        if (min > result.distance) {\n          closestMatch = result.closestMatch;\n          closestMatchPath = result.path;\n          min = result.distance;\n          indexMatch = result.indexMatch;\n        }\n      } else {\n        if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) {\n          indexMatch = op;\n        }\n        distance = Validator.levenshteinDistance(option, op);\n        if (min > distance) {\n          closestMatch = op;\n          closestMatchPath = copyArray(path);\n          min = distance;\n        }\n      }\n    }\n    return {\n      closestMatch: closestMatch,\n      path: closestMatchPath,\n      distance: min,\n      indexMatch: indexMatch,\n    };\n  }\n\n  /**\n   * @param {Array.<string>} path\n   * @param {object} option\n   * @param {string} prefix\n   * @returns {string}\n   * @static\n   */\n  static printLocation(path, option, prefix = \"Problem value found at: \\n\") {\n    let str = \"\\n\\n\" + prefix + \"options = {\\n\";\n    for (let i = 0; i < path.length; i++) {\n      for (let j = 0; j < i + 1; j++) {\n        str += \"  \";\n      }\n      str += path[i] + \": {\\n\";\n    }\n    for (let j = 0; j < path.length + 1; j++) {\n      str += \"  \";\n    }\n    str += option + \"\\n\";\n    for (let i = 0; i < path.length + 1; i++) {\n      for (let j = 0; j < path.length - i; j++) {\n        str += \"  \";\n      }\n      str += \"}\\n\";\n    }\n    return str + \"\\n\\n\";\n  }\n\n  /**\n   * @param {object} options\n   * @returns {string}\n   * @static\n   */\n  static print(options) {\n    return JSON.stringify(options)\n      .replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g, \"\")\n      .replace(/(,)/g, \", \");\n  }\n\n  /**\n   *  Compute the edit distance between the two given strings\n   *  http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript\n   *\n   *  Copyright (c) 2011 Andrei Mackenzie\n   *\n   *  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n   *\n   *  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n   *\n   *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n   * @param {string} a\n   * @param {string} b\n   * @returns {Array.<Array.<number>>}}\n   * @static\n   */\n  static levenshteinDistance(a, b) {\n    if (a.length === 0) return b.length;\n    if (b.length === 0) return a.length;\n\n    const matrix = [];\n\n    // increment along the first column of each row\n    let i;\n    for (i = 0; i <= b.length; i++) {\n      matrix[i] = [i];\n    }\n\n    // increment each column in the first row\n    let j;\n    for (j = 0; j <= a.length; j++) {\n      matrix[0][j] = j;\n    }\n\n    // Fill in the rest of the matrix\n    for (i = 1; i <= b.length; i++) {\n      for (j = 1; j <= a.length; j++) {\n        if (b.charAt(i - 1) == a.charAt(j - 1)) {\n          matrix[i][j] = matrix[i - 1][j - 1];\n        } else {\n          matrix[i][j] = Math.min(\n            matrix[i - 1][j - 1] + 1, // substitution\n            Math.min(\n              matrix[i][j - 1] + 1, // insertion\n              matrix[i - 1][j] + 1,\n            ),\n          ); // deletion\n        }\n      }\n    }\n\n    return matrix[b.length][a.length];\n  }\n};\n\nconst Activator = Activator$1;\nconst ColorPicker = ColorPicker$1;\nconst Configurator = Configurator$1;\nconst Hammer = Hammer$1;\nconst Popup = Popup$1;\nconst VALIDATOR_PRINT_STYLE = VALIDATOR_PRINT_STYLE$1;\nconst Validator = Validator$1;\n\nexport { Activator, Alea, ColorPicker, Configurator, DELETE, HSVToHex, HSVToRGB, Hammer, Popup, RGBToHSV, RGBToHex, VALIDATOR_PRINT_STYLE, Validator, addClassName, addCssText, binarySearchCustom, binarySearchValue, bridgeObject, copyAndExtendArray, copyArray, deepExtend, deepObjectAssign, easingFunctions, equalArray, extend, fillIfDefined, forEach, getAbsoluteLeft, getAbsoluteRight, getAbsoluteTop, getScrollBarWidth, getTarget, getType, hasParent, hexToHSV, hexToRGB, insertSort, isDate, isNumber, isObject, isString, isValidHex, isValidRGB, isValidRGBA, mergeOptions, option, overrideOpacity, parseColor, preventDefault, pureDeepObjectAssign, recursiveDOMDelete, removeClassName, removeCssText, selectiveBridgeObject, selectiveDeepExtend, selectiveExtend, selectiveNotDeepExtend, throttle, toArray, topMost, updateProperty };\n//# sourceMappingURL=vis-util.mjs.map\n", "// DOM utility methods\n\n/**\n * this prepares the JSON container for allocating SVG elements\n * @param {Object} JSONcontainer\n * @private\n */\nexport function prepareElements(JSONcontainer) {\n  // cleanup the redundant svgElements;\n  for (var elementType in JSONcontainer) {\n    if (!Object.prototype.hasOwnProperty.call(JSONcontainer, elementType))\n      continue;\n    JSONcontainer[elementType].redundant = JSONcontainer[elementType].used;\n    JSONcontainer[elementType].used = [];\n  }\n}\n\n/**\n * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from\n * which to remove the redundant elements.\n *\n * @param {Object} JSONcontainer\n * @private\n */\nexport function cleanupElements(JSONcontainer) {\n  // cleanup the redundant svgElements;\n  for (var elementType in JSONcontainer) {\n    if (!Object.prototype.hasOwnProperty.call(JSONcontainer, elementType))\n      continue;\n    const elementTypeJsonContainer = JSONcontainer[elementType];\n    for (var i = 0; i < elementTypeJsonContainer.redundant.length; i++) {\n      elementTypeJsonContainer.redundant[i].parentNode.removeChild(\n        elementTypeJsonContainer.redundant[i],\n      );\n    }\n    elementTypeJsonContainer.redundant = [];\n  }\n}\n\n/**\n * Ensures that all elements are removed first up so they can be recreated cleanly\n * @param {Object} JSONcontainer\n */\nexport function resetElements(JSONcontainer) {\n  prepareElements(JSONcontainer);\n  cleanupElements(JSONcontainer);\n  prepareElements(JSONcontainer);\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param {string} elementType\n * @param {Object} JSONcontainer\n * @param {Object} svgContainer\n * @returns {Element}\n * @private\n */\nexport function getSVGElement(elementType, JSONcontainer, svgContainer) {\n  var element;\n  // allocate SVG element, if it doesnt yet exist, create one.\n  if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n    // this element has been created before\n    // check if there is an redundant element\n    if (JSONcontainer[elementType].redundant.length > 0) {\n      element = JSONcontainer[elementType].redundant[0];\n      JSONcontainer[elementType].redundant.shift();\n    } else {\n      // create a new element and add it to the SVG\n      element = document.createElementNS(\n        \"http://www.w3.org/2000/svg\",\n        elementType,\n      );\n      svgContainer.appendChild(element);\n    }\n  } else {\n    // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n    element = document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      elementType,\n    );\n    JSONcontainer[elementType] = { used: [], redundant: [] };\n    svgContainer.appendChild(element);\n  }\n  JSONcontainer[elementType].used.push(element);\n  return element;\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param {string} elementType\n * @param {Object} JSONcontainer\n * @param {Element} DOMContainer\n * @param {Element} insertBefore\n * @returns {*}\n */\nexport function getDOMElement(\n  elementType,\n  JSONcontainer,\n  DOMContainer,\n  insertBefore,\n) {\n  var element;\n  // allocate DOM element, if it doesnt yet exist, create one.\n  if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n    // this element has been created before\n    // check if there is an redundant element\n    if (JSONcontainer[elementType].redundant.length > 0) {\n      element = JSONcontainer[elementType].redundant[0];\n      JSONcontainer[elementType].redundant.shift();\n    } else {\n      // create a new element and add it to the SVG\n      element = document.createElement(elementType);\n      if (insertBefore !== undefined) {\n        DOMContainer.insertBefore(element, insertBefore);\n      } else {\n        DOMContainer.appendChild(element);\n      }\n    }\n  } else {\n    // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n    element = document.createElement(elementType);\n    JSONcontainer[elementType] = { used: [], redundant: [] };\n    if (insertBefore !== undefined) {\n      DOMContainer.insertBefore(element, insertBefore);\n    } else {\n      DOMContainer.appendChild(element);\n    }\n  }\n  JSONcontainer[elementType].used.push(element);\n  return element;\n}\n\n/**\n * Draw a point object. This is a separate function because it can also be called by the legend.\n * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions\n * as well.\n *\n * @param {number} x\n * @param {number} y\n * @param {Object} groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' }\n * @param {Object} JSONcontainer\n * @param {Object} svgContainer\n * @param {Object} labelObj\n * @returns {vis.PointItem}\n */\nexport function drawPoint(\n  x,\n  y,\n  groupTemplate,\n  JSONcontainer,\n  svgContainer,\n  labelObj,\n) {\n  var point;\n  if (groupTemplate.style == \"circle\") {\n    point = getSVGElement(\"circle\", JSONcontainer, svgContainer);\n    point.setAttributeNS(null, \"cx\", x);\n    point.setAttributeNS(null, \"cy\", y);\n    point.setAttributeNS(null, \"r\", 0.5 * groupTemplate.size);\n  } else {\n    point = getSVGElement(\"rect\", JSONcontainer, svgContainer);\n    point.setAttributeNS(null, \"x\", x - 0.5 * groupTemplate.size);\n    point.setAttributeNS(null, \"y\", y - 0.5 * groupTemplate.size);\n    point.setAttributeNS(null, \"width\", groupTemplate.size);\n    point.setAttributeNS(null, \"height\", groupTemplate.size);\n  }\n\n  if (groupTemplate.styles !== undefined) {\n    point.setAttributeNS(null, \"style\", groupTemplate.styles);\n  }\n  point.setAttributeNS(null, \"class\", groupTemplate.className + \" vis-point\");\n  //handle label\n\n  if (labelObj) {\n    var label = getSVGElement(\"text\", JSONcontainer, svgContainer);\n    if (labelObj.xOffset) {\n      x = x + labelObj.xOffset;\n    }\n\n    if (labelObj.yOffset) {\n      y = y + labelObj.yOffset;\n    }\n    if (labelObj.content) {\n      label.textContent = labelObj.content;\n    }\n\n    if (labelObj.className) {\n      label.setAttributeNS(null, \"class\", labelObj.className + \" vis-label\");\n    }\n    label.setAttributeNS(null, \"x\", x);\n    label.setAttributeNS(null, \"y\", y);\n  }\n\n  return point;\n}\n\n/**\n * draw a bar SVG element centered on the X coordinate\n *\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} className\n * @param {Object} JSONcontainer\n * @param {Object} svgContainer\n * @param {string} style\n */\nexport function drawBar(\n  x,\n  y,\n  width,\n  height,\n  className,\n  JSONcontainer,\n  svgContainer,\n  style,\n) {\n  if (height != 0) {\n    if (height < 0) {\n      height *= -1;\n      y -= height;\n    }\n    var rect = getSVGElement(\"rect\", JSONcontainer, svgContainer);\n    rect.setAttributeNS(null, \"x\", x - 0.5 * width);\n    rect.setAttributeNS(null, \"y\", y);\n    rect.setAttributeNS(null, \"width\", width);\n    rect.setAttributeNS(null, \"height\", height);\n    rect.setAttributeNS(null, \"class\", className);\n    if (style) {\n      rect.setAttributeNS(null, \"style\", style);\n    }\n  }\n}\n\n/**\n * get default language\n * @returns {string}\n */\nexport function getNavigatorLanguage() {\n  try {\n    if (!navigator) return \"en\";\n    if (navigator.languages && navigator.languages.length) {\n      return navigator.languages;\n    } else {\n      return (\n        navigator.userLanguage ||\n        navigator.language ||\n        navigator.browserLanguage ||\n        \"en\"\n      );\n    }\n  } catch (error) {\n    return \"en\";\n  }\n}\n", "'use strict';\nrequire('../../modules/es.symbol');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getOwnPropertySymbols;\n", "'use strict';\nvar parent = require('../../es/object/get-own-property-symbols');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/object/get-own-property-symbols\");", "'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FORCED = !DESCRIPTORS || fails(function () { nativeGetOwnPropertyDescriptor(1); });\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n  }\n});\n", "'use strict';\nrequire('../../modules/es.object.get-own-property-descriptor');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar getOwnPropertyDescriptor = module.exports = function getOwnPropertyDescriptor(it, key) {\n  return Object.getOwnPropertyDescriptor(it, key);\n};\n\nif (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true;\n", "'use strict';\nvar parent = require('../../es/object/get-own-property-descriptor');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/object/get-own-property-descriptor\");", "'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIndexedObject(object);\n    var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var index = 0;\n    var key, descriptor;\n    while (keys.length > index) {\n      descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n      if (descriptor !== undefined) createProperty(result, key, descriptor);\n    }\n    return result;\n  }\n});\n", "'use strict';\nrequire('../../modules/es.object.get-own-property-descriptors');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getOwnPropertyDescriptors;\n", "'use strict';\nvar parent = require('../../es/object/get-own-property-descriptors');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/object/get-own-property-descriptors\");", "'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties').f;\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, {\n  defineProperties: defineProperties\n});\n", "'use strict';\nrequire('../../modules/es.object.define-properties');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperties = module.exports = function defineProperties(T, D) {\n  return Object.defineProperties(T, D);\n};\n\nif (Object.defineProperties.sham) defineProperties.sham = true;\n", "'use strict';\nvar parent = require('../../es/object/define-properties');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/object/define-properties\");", "'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\n// eslint-disable-next-line es/no-object-defineproperty -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {\n  defineProperty: defineProperty\n});\n", "'use strict';\nrequire('../../modules/es.object.define-property');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperty = module.exports = function defineProperty(it, key, desc) {\n  return Object.defineProperty(it, key, desc);\n};\n\nif (Object.defineProperty.sham) defineProperty.sham = true;\n", "'use strict';\nvar parent = require('../../es/object/define-property');\n\nmodule.exports = parent;\n", "'use strict';\nvar parent = require('../../stable/object/define-property');\n\nmodule.exports = parent;\n", "'use strict';\nvar parent = require('../../actual/object/define-property');\n\nmodule.exports = parent;\n", "'use strict';\nmodule.exports = require('../../full/object/define-property');\n", "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar METADATA = wellKnownSymbol('metadata');\nvar FunctionPrototype = Function.prototype;\n\n// Function.prototype[@@metadata]\n// https://github.com/tc39/proposal-decorator-metadata\nif (FunctionPrototype[METADATA] === undefined) {\n  defineProperty(FunctionPrototype, METADATA, {\n    value: null\n  });\n}\n", "'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.symbol.async-dispose');\n", "'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.symbol.dispose');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.metadata` well-known symbol\n// https://github.com/tc39/proposal-decorators\ndefineWellKnownSymbol('metadata');\n", "'use strict';\nvar parent = require('../../stable/symbol');\n\nrequire('../../modules/esnext.function.metadata');\nrequire('../../modules/esnext.symbol.async-dispose');\nrequire('../../modules/esnext.symbol.dispose');\nrequire('../../modules/esnext.symbol.metadata');\n\nmodule.exports = parent;\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar Symbol = getBuiltIn('Symbol');\nvar keyFor = Symbol.keyFor;\nvar thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);\n\n// `Symbol.isRegisteredSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\nmodule.exports = Symbol.isRegisteredSymbol || function isRegisteredSymbol(value) {\n  try {\n    return keyFor(thisSymbolValue(value)) !== undefined;\n  } catch (error) {\n    return false;\n  }\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar isRegisteredSymbol = require('../internals/symbol-is-registered');\n\n// `Symbol.isRegisteredSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n$({ target: 'Symbol', stat: true }, {\n  isRegisteredSymbol: isRegisteredSymbol\n});\n", "'use strict';\nvar shared = require('../internals/shared');\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isSymbol = require('../internals/is-symbol');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar Symbol = getBuiltIn('Symbol');\nvar $isWellKnownSymbol = Symbol.isWellKnownSymbol;\nvar getOwnPropertyNames = getBuiltIn('Object', 'getOwnPropertyNames');\nvar thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);\nvar WellKnownSymbolsStore = shared('wks');\n\nfor (var i = 0, symbolKeys = getOwnPropertyNames(Symbol), symbolKeysLength = symbolKeys.length; i < symbolKeysLength; i++) {\n  // some old engines throws on access to some keys like `arguments` or `caller`\n  try {\n    var symbolKey = symbolKeys[i];\n    if (isSymbol(Symbol[symbolKey])) wellKnownSymbol(symbolKey);\n  } catch (error) { /* empty */ }\n}\n\n// `Symbol.isWellKnownSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\nmodule.exports = function isWellKnownSymbol(value) {\n  if ($isWellKnownSymbol && $isWellKnownSymbol(value)) return true;\n  try {\n    var symbol = thisSymbolValue(value);\n    for (var j = 0, keys = getOwnPropertyNames(WellKnownSymbolsStore), keysLength = keys.length; j < keysLength; j++) {\n      // eslint-disable-next-line eqeqeq -- polyfilled symbols case\n      if (WellKnownSymbolsStore[keys[j]] == symbol) return true;\n    }\n  } catch (error) { /* empty */ }\n  return false;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar isWellKnownSymbol = require('../internals/symbol-is-well-known');\n\n// `Symbol.isWellKnownSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n$({ target: 'Symbol', stat: true, forced: true }, {\n  isWellKnownSymbol: isWellKnownSymbol\n});\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.customMatcher` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('customMatcher');\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n", "'use strict';\nvar $ = require('../internals/export');\nvar isRegisteredSymbol = require('../internals/symbol-is-registered');\n\n// `Symbol.isRegistered` method\n// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n$({ target: 'Symbol', stat: true, name: 'isRegisteredSymbol' }, {\n  isRegistered: isRegisteredSymbol\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar isWellKnownSymbol = require('../internals/symbol-is-well-known');\n\n// `Symbol.isWellKnown` method\n// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n$({ target: 'Symbol', stat: true, name: 'isWellKnownSymbol', forced: true }, {\n  isWellKnown: isWellKnownSymbol\n});\n", "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.matcher` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('matcher');\n", "'use strict';\n// TODO: Remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.metadataKey` well-known symbol\n// https://github.com/tc39/proposal-decorator-metadata\ndefineWellKnownSymbol('metadataKey');\n", "'use strict';\n// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n", "'use strict';\n// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\ndefineWellKnownSymbol('replaceAll');\n", "'use strict';\nvar parent = require('../../actual/symbol');\nrequire('../../modules/esnext.symbol.is-registered-symbol');\nrequire('../../modules/esnext.symbol.is-well-known-symbol');\nrequire('../../modules/esnext.symbol.custom-matcher');\nrequire('../../modules/esnext.symbol.observable');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.is-registered');\nrequire('../../modules/esnext.symbol.is-well-known');\nrequire('../../modules/esnext.symbol.matcher');\nrequire('../../modules/esnext.symbol.metadata-key');\nrequire('../../modules/esnext.symbol.pattern-match');\nrequire('../../modules/esnext.symbol.replace-all');\n\nmodule.exports = parent;\n", "'use strict';\nmodule.exports = require('../../full/symbol');\n", "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = toString(requireObjectCoercible($this));\n    var position = toIntegerOrInfinity(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = charCodeAt(S, position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING\n          ? charAt(S, position)\n          : first\n        : CONVERT_TO_STRING\n          ? stringSlice(S, position, position + 2)\n          : (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 charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\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: toString(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 createIterResultObject(undefined, true);\n  point = charAt(string, index);\n  state.index += point.length;\n  return createIterResultObject(point, false);\n});\n", "'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/es.symbol.iterator');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('iterator');\n", "'use strict';\nvar parent = require('../../es/symbol/iterator');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n", "'use strict';\nvar parent = require('../../stable/symbol/iterator');\n\nmodule.exports = parent;\n", "'use strict';\nvar parent = require('../../actual/symbol/iterator');\n\nmodule.exports = parent;\n", "'use strict';\nmodule.exports = require('../../full/symbol/iterator');\n", "import _Symbol from \"core-js-pure/features/symbol/index.js\";\nimport _Symbol$iterator from \"core-js-pure/features/symbol/iterator.js\";\nfunction _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof _Symbol && \"symbol\" == typeof _Symbol$iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };", "'use strict';\nrequire('../../modules/es.date.to-primitive');\nrequire('../../modules/es.symbol.to-primitive');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('toPrimitive');\n", "'use strict';\nvar parent = require('../../es/symbol/to-primitive');\n\nmodule.exports = parent;\n", "'use strict';\nvar parent = require('../../stable/symbol/to-primitive');\n\nmodule.exports = parent;\n", "'use strict';\nvar parent = require('../../actual/symbol/to-primitive');\n\nmodule.exports = parent;\n", "'use strict';\nmodule.exports = require('../../full/symbol/to-primitive');\n", "import _typeof from \"./typeof.js\";\nimport _Symbol$toPrimitive from \"core-js-pure/features/symbol/to-primitive.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[_Symbol$toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };", "import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };", "import _Object$defineProperty from \"core-js-pure/features/object/define-property.js\";\nimport toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? _Object$defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };", "'use strict';\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar $TypeError = TypeError;\n\nvar REDUCE_EMPTY = 'Reduce of empty array with no initial value';\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n  return function (that, callbackfn, argumentsLength, memo) {\n    var O = toObject(that);\n    var self = IndexedObject(O);\n    var length = lengthOfArrayLike(O);\n    aCallable(callbackfn);\n    if (length === 0 && argumentsLength < 2) throw new $TypeError(REDUCE_EMPTY);\n    var index = IS_RIGHT ? length - 1 : 0;\n    var i = IS_RIGHT ? -1 : 1;\n    if (argumentsLength < 2) while (true) {\n      if (index in self) {\n        memo = self[index];\n        index += i;\n        break;\n      }\n      index += i;\n      if (IS_RIGHT ? index < 0 : length <= index) {\n        throw new $TypeError(REDUCE_EMPTY);\n      }\n    }\n    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n      memo = callbackfn(memo, self[index], index, O);\n    }\n    return memo;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.reduce` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduce\n  left: createMethod(false),\n  // `Array.prototype.reduceRight` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n  right: createMethod(true)\n};\n", "'use strict';\nvar ENVIRONMENT = require('../internals/environment');\n\nmodule.exports = ENVIRONMENT === 'NODE';\n", "'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/environment-v8-version');\nvar IS_NODE = require('../internals/environment-is-node');\n\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\nvar FORCED = CHROME_BUG || !arrayMethodIsStrict('reduce');\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  reduce: function reduce(callbackfn /* , initialValue */) {\n    var length = arguments.length;\n    return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);\n  }\n});\n", "'use strict';\nrequire('../../../modules/es.array.reduce');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'reduce');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/reduce');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.reduce;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reduce) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/reduce');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/reduce\");", "'use strict';\nvar isArray = require('../internals/is-array');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.es/ecma262/#sec-flattenintoarray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n  var targetIndex = start;\n  var sourceIndex = 0;\n  var mapFn = mapper ? bind(mapper, thisArg) : false;\n  var element, elementLen;\n\n  while (sourceIndex < sourceLen) {\n    if (sourceIndex in source) {\n      element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n      if (depth > 0 && isArray(element)) {\n        elementLen = lengthOfArrayLike(element);\n        targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;\n      } else {\n        doesNotExceedSafeInteger(targetIndex + 1);\n        target[targetIndex] = element;\n      }\n\n      targetIndex++;\n    }\n    sourceIndex++;\n  }\n  return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n", "'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n  flatMap: function flatMap(callbackfn /* , thisArg */) {\n    var O = toObject(this);\n    var sourceLen = lengthOfArrayLike(O);\n    var A;\n    aCallable(callbackfn);\n    A = arraySpeciesCreate(O, 0);\n    A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    return A;\n  }\n});\n", "'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n", "'use strict';\nrequire('../../../modules/es.array.flat-map');\nrequire('../../../modules/es.array.unscopables.flat-map');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'flatMap');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/flat-map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.flatMap;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.flatMap) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/flat-map');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/flat-map\");", "module.exports = require(\"core-js-pure/stable/symbol/iterator\");", "'use strict';\n// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails = require('../internals/fails');\n\nmodule.exports = fails(function () {\n  if (typeof ArrayBuffer == 'function') {\n    var buffer = new ArrayBuffer(8);\n    // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n    if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n  }\n});\n", "'use strict';\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n  if (!isObject(it)) return false;\n  if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return false;\n  return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n", "'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n  return Object.isExtensible(Object.preventExtensions({}));\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n  defineProperty(it, METADATA, { value: {\n    objectID: 'O' + id++, // object ID\n    weakData: {}          // weak collections IDs\n  } });\n};\n\nvar fastKey = function (it, create) {\n  // return a primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!hasOwn(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMetadata(it);\n  // return object ID\n  } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n  if (!hasOwn(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMetadata(it);\n  // return the store of weak collections IDs\n  } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n  return it;\n};\n\nvar enable = function () {\n  meta.enable = function () { /* empty */ };\n  REQUIRED = true;\n  var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n  var splice = uncurryThis([].splice);\n  var test = {};\n  test[METADATA] = 1;\n\n  // prevent exposing of metadata key\n  if (getOwnPropertyNames(test).length) {\n    getOwnPropertyNamesModule.f = function (it) {\n      var result = getOwnPropertyNames(it);\n      for (var i = 0, length = result.length; i < length; i++) {\n        if (result[i] === METADATA) {\n          splice(result, i, 1);\n          break;\n        }\n      } return result;\n    };\n\n    $({ target: 'Object', stat: true, forced: true }, {\n      getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n    });\n  }\n};\n\nvar meta = module.exports = {\n  enable: enable,\n  fastKey: fastKey,\n  getWeakData: getWeakData,\n  onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n", "'use strict';\nvar 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", "'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n", "'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n", "'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n", "'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_RECORD = !!(options && options.IS_RECORD);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    if (iterator) iteratorClose(iterator, 'normal');\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_RECORD) {\n    iterator = iterable.iterator;\n  } else if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = IS_RECORD ? iterable.next : iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    try {\n      result = callFn(step.value);\n    } catch (error) {\n      iteratorClose(iterator, 'throw', error);\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n", "'use strict';\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n  if (isPrototypeOf(Prototype, it)) return it;\n  throw new $TypeError('Incorrect invocation');\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar fails = require('../internals/fails');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar defineProperty = require('../internals/object-define-property').f;\nvar forEach = require('../internals/array-iteration').forEach;\nvar DESCRIPTORS = require('../internals/descriptors');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var NativeConstructor = globalThis[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var exported = {};\n  var Constructor;\n\n  if (!DESCRIPTORS || !isCallable(NativeConstructor)\n    || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); }))\n  ) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.enable();\n  } else {\n    Constructor = wrapper(function (target, iterable) {\n      setInternalState(anInstance(target, Prototype), {\n        type: CONSTRUCTOR_NAME,\n        collection: new NativeConstructor()\n      });\n      if (!isNullOrUndefined(iterable)) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP });\n    });\n\n    var Prototype = Constructor.prototype;\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) {\n      var IS_ADDER = KEY === 'add' || KEY === 'set';\n      if (KEY in NativePrototype && !(IS_WEAK && KEY === 'clear')) {\n        createNonEnumerableProperty(Prototype, KEY, function (a, b) {\n          var collection = getInternalState(this).collection;\n          if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY === 'get' ? undefined : false;\n          var result = collection[KEY](a === 0 ? 0 : a, b);\n          return IS_ADDER ? this : result;\n        });\n      }\n    });\n\n    IS_WEAK || defineProperty(Prototype, 'size', {\n      configurable: true,\n      get: function () {\n        return getInternalState(this).collection.size;\n      }\n    });\n  }\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true);\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: true }, exported);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n", "'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) {\n    if (options && options.unsafe && target[key]) target[key] = src[key];\n    else defineBuiltIn(target, key, src[key], options);\n  } return target;\n};\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\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\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineBuiltInAccessor(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n", "'use strict';\nvar create = require('../internals/object-create');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var Constructor = wrapper(function (that, iterable) {\n      anInstance(that, Prototype);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: null,\n        last: null,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n    });\n\n    var Prototype = Constructor.prototype;\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: null,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key === key) return entry;\n      }\n    };\n\n    defineBuiltIns(Prototype, {\n      // `{ Map, Set }.prototype.clear()` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.clear\n      // https://tc39.es/ecma262/#sec-set.prototype.clear\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = null;\n          entry = entry.next;\n        }\n        state.first = state.last = null;\n        state.index = create(null);\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // `{ Map, Set }.prototype.delete(key)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.delete\n      // https://tc39.es/ecma262/#sec-set.prototype.delete\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first === entry) state.first = next;\n          if (state.last === entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.foreach\n      // https://tc39.es/ecma262/#sec-set.prototype.foreach\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // `{ Map, Set}.prototype.has(key)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.has\n      // https://tc39.es/ecma262/#sec-set.prototype.has\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    defineBuiltIns(Prototype, IS_MAP ? {\n      // `Map.prototype.get(key)` method\n      // https://tc39.es/ecma262/#sec-map.prototype.get\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // `Map.prototype.set(key, value)` method\n      // https://tc39.es/ecma262/#sec-map.prototype.set\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // `Set.prototype.add(value)` method\n      // https://tc39.es/ecma262/#sec-set.prototype.add\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineBuiltInAccessor(Prototype, 'size', {\n      configurable: true,\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return Constructor;\n  },\n  setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n    // https://tc39.es/ecma262/#sec-map.prototype.entries\n    // https://tc39.es/ecma262/#sec-map.prototype.keys\n    // https://tc39.es/ecma262/#sec-map.prototype.values\n    // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n    // https://tc39.es/ecma262/#sec-set.prototype.entries\n    // https://tc39.es/ecma262/#sec-set.prototype.keys\n    // https://tc39.es/ecma262/#sec-set.prototype.values\n    // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n    defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: null\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = null;\n        return createIterResultObject(undefined, true);\n      }\n      // return step by kind\n      if (kind === 'keys') return createIterResultObject(entry.key, false);\n      if (kind === 'values') return createIterResultObject(entry.value, false);\n      return createIterResultObject([entry.key, entry.value], false);\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // `{ Map, Set }.prototype[@@species]` accessors\n    // https://tc39.es/ecma262/#sec-get-map-@@species\n    // https://tc39.es/ecma262/#sec-get-set-@@species\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n", "'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n", "'use strict';\n// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.map.constructor');\n", "'use strict';\nmodule.exports = function (methodName, numArgs) {\n  return numArgs === 1 ? function (object, arg) {\n    return object[methodName](arg);\n  } : function (object, arg1, arg2) {\n    return object[methodName](arg1, arg2);\n  };\n};\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar caller = require('../internals/caller');\n\nvar Map = getBuiltIn('Map');\n\nmodule.exports = {\n  Map: Map,\n  set: caller('set', 2),\n  get: caller('get', 1),\n  has: caller('has', 1),\n  remove: caller('delete', 1),\n  proto: Map.prototype\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar iterate = require('../internals/iterate');\nvar MapHelpers = require('../internals/map-helpers');\nvar IS_PURE = require('../internals/is-pure');\nvar fails = require('../internals/fails');\n\nvar Map = MapHelpers.Map;\nvar has = MapHelpers.has;\nvar get = MapHelpers.get;\nvar set = MapHelpers.set;\nvar push = uncurryThis([].push);\n\n// https://bugs.webkit.org/show_bug.cgi?id=271524\nvar DOES_NOT_WORK_WITH_PRIMITIVES = IS_PURE || fails(function () {\n  return Map.groupBy('ab', function (it) {\n    return it;\n  }).get('a').length !== 1;\n});\n\n// `Map.groupBy` method\n// https://tc39.es/ecma262/#sec-map.groupby\n$({ target: 'Map', stat: true, forced: IS_PURE || DOES_NOT_WORK_WITH_PRIMITIVES }, {\n  groupBy: function groupBy(items, callbackfn) {\n    requireObjectCoercible(items);\n    aCallable(callbackfn);\n    var map = new Map();\n    var k = 0;\n    iterate(items, function (value) {\n      var key = callbackfn(value, k++);\n      if (!has(map, key)) set(map, key, [value]);\n      else push(get(map, key), value);\n    });\n    return map;\n  }\n});\n", "'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.map');\nrequire('../../modules/es.map.group-by');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n", "'use strict';\nvar parent = require('../../es/map');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/map\");", "'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n  return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n", "'use strict';\n// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.set.constructor');\n", "'use strict';\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// Perform ? RequireInternalSlot(M, [[SetData]])\nmodule.exports = function (it) {\n  if (typeof it == 'object' && 'size' in it && 'has' in it && 'add' in it && 'delete' in it && 'keys' in it) return it;\n  throw new $TypeError(tryToString(it) + ' is not a set');\n};\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar caller = require('../internals/caller');\n\nvar Set = getBuiltIn('Set');\nvar SetPrototype = Set.prototype;\n\nmodule.exports = {\n  Set: Set,\n  add: caller('add', 1),\n  has: caller('has', 1),\n  remove: caller('delete', 1),\n  proto: SetPrototype\n};\n", "'use strict';\nvar call = require('../internals/function-call');\n\nmodule.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {\n  var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;\n  var next = record.next;\n  var step, result;\n  while (!(step = call(next, iterator)).done) {\n    result = fn(step.value);\n    if (result !== undefined) return result;\n  }\n};\n", "'use strict';\nvar iterateSimple = require('../internals/iterate-simple');\n\nmodule.exports = function (set, fn, interruptible) {\n  return interruptible ? iterateSimple(set.keys(), fn, true) : set.forEach(fn);\n};\n", "'use strict';\nvar SetHelpers = require('../internals/set-helpers');\nvar iterate = require('../internals/set-iterate');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\nmodule.exports = function (set) {\n  var result = new Set();\n  iterate(set, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n", "'use strict';\nmodule.exports = function (set) {\n  return set.size;\n};\n", "'use strict';\n// `GetIteratorDirect(obj)` abstract operation\n// https://tc39.es/ecma262/#sec-getiteratordirect\nmodule.exports = function (obj) {\n  return {\n    iterator: obj,\n    next: obj.next,\n    done: false\n  };\n};\n", "'use strict';\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar call = require('../internals/function-call');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\n\nvar INVALID_SIZE = 'Invalid size';\nvar $RangeError = RangeError;\nvar $TypeError = TypeError;\nvar max = Math.max;\n\nvar SetRecord = function (set, intSize) {\n  this.set = set;\n  this.size = max(intSize, 0);\n  this.has = aCallable(set.has);\n  this.keys = aCallable(set.keys);\n};\n\nSetRecord.prototype = {\n  getIterator: function () {\n    return getIteratorDirect(anObject(call(this.keys, this.set)));\n  },\n  includes: function (it) {\n    return call(this.has, this.set, it);\n  }\n};\n\n// `GetSetRecord` abstract operation\n// https://tc39.es/proposal-set-methods/#sec-getsetrecord\nmodule.exports = function (obj) {\n  anObject(obj);\n  var numSize = +obj.size;\n  // NOTE: If size is undefined, then numSize will be NaN\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);\n  var intSize = toIntegerOrInfinity(numSize);\n  if (intSize < 0) throw new $RangeError(INVALID_SIZE);\n  return new SetRecord(obj, intSize);\n};\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.difference` method\n// https://tc39.es/ecma262/#sec-set.prototype.difference\nmodule.exports = function difference(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = clone(O);\n  if (size(O) <= otherRec.size) iterateSet(O, function (e) {\n    if (otherRec.includes(e)) remove(result, e);\n  });\n  else iterateSimple(otherRec.getIterator(), function (e) {\n    if (has(result, e)) remove(result, e);\n  });\n  return result;\n};\n", "'use strict';\nmodule.exports = function () {\n  return false;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar difference = require('../internals/set-difference');\nvar fails = require('../internals/fails');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar SET_LIKE_INCORRECT_BEHAVIOR = !setMethodAcceptSetLike('difference', function (result) {\n  return result.size === 0;\n});\n\nvar FORCED = SET_LIKE_INCORRECT_BEHAVIOR || fails(function () {\n  // https://bugs.webkit.org/show_bug.cgi?id=288595\n  var setLike = {\n    size: 1,\n    has: function () { return true; },\n    keys: function () {\n      var index = 0;\n      return {\n        next: function () {\n          var done = index++ > 1;\n          if (baseSet.has(1)) baseSet.clear();\n          return { done: done, value: 2 };\n        }\n      };\n    }\n  };\n  // eslint-disable-next-line es/no-set -- testing\n  var baseSet = new Set([1, 2, 3, 4]);\n  // eslint-disable-next-line es/no-set-prototype-difference -- testing\n  return baseSet.difference(setLike).size !== 3;\n});\n\n// `Set.prototype.difference` method\n// https://tc39.es/ecma262/#sec-set.prototype.difference\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  difference: difference\n});\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\n\n// `Set.prototype.intersection` method\n// https://tc39.es/ecma262/#sec-set.prototype.intersection\nmodule.exports = function intersection(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = new Set();\n\n  if (size(O) > otherRec.size) {\n    iterateSimple(otherRec.getIterator(), function (e) {\n      if (has(O, e)) add(result, e);\n    });\n  } else {\n    iterateSet(O, function (e) {\n      if (otherRec.includes(e)) add(result, e);\n    });\n  }\n\n  return result;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar intersection = require('../internals/set-intersection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('intersection', function (result) {\n  return result.size === 2 && result.has(1) && result.has(2);\n}) || fails(function () {\n  // eslint-disable-next-line es/no-array-from, es/no-set, es/no-set-prototype-intersection -- testing\n  return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2';\n});\n\n// `Set.prototype.intersection` method\n// https://tc39.es/ecma262/#sec-set.prototype.intersection\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  intersection: intersection\n});\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom\nmodule.exports = function isDisjointFrom(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) <= otherRec.size) return iterateSet(O, function (e) {\n    if (otherRec.includes(e)) return false;\n  }, true) !== false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (has(O, e)) return iteratorClose(iterator, 'normal', false);\n  }) !== false;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar isDisjointFrom = require('../internals/set-is-disjoint-from');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('isDisjointFrom', function (result) {\n  return !result;\n});\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isDisjointFrom: isDisjointFrom\n});\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar size = require('../internals/set-size');\nvar iterate = require('../internals/set-iterate');\nvar getSetRecord = require('../internals/get-set-record');\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issubsetof\nmodule.exports = function isSubsetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) > otherRec.size) return false;\n  return iterate(O, function (e) {\n    if (!otherRec.includes(e)) return false;\n  }, true) !== false;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar isSubsetOf = require('../internals/set-is-subset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('isSubsetOf', function (result) {\n  return result;\n});\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issubsetof\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isSubsetOf: isSubsetOf\n});\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issupersetof\nmodule.exports = function isSupersetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) < otherRec.size) return false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (!has(O, e)) return iteratorClose(iterator, 'normal', false);\n  }) !== false;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar isSupersetOf = require('../internals/set-is-superset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('isSupersetOf', function (result) {\n  return !result;\n});\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.es/ecma262/#sec-set.prototype.issupersetof\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  isSupersetOf: isSupersetOf\n});\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.symmetricDifference` method\n// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference\nmodule.exports = function symmetricDifference(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (e) {\n    if (has(O, e)) remove(result, e);\n    else add(result, e);\n  });\n  return result;\n};\n", "'use strict';\n// Should get iterator record of a set-like object before cloning this\n// https://bugs.webkit.org/show_bug.cgi?id=289430\nmodule.exports = function (METHOD_NAME) {\n  try {\n    // eslint-disable-next-line es/no-set -- needed for test\n    var baseSet = new Set();\n    var setLike = {\n      size: 0,\n      has: function () { return true; },\n      keys: function () {\n        // eslint-disable-next-line es/no-object-defineproperty -- needed for test\n        return Object.defineProperty({}, 'next', {\n          get: function () {\n            baseSet.clear();\n            baseSet.add(4);\n            return function () {\n              return { done: true };\n            };\n          }\n        });\n      }\n    };\n    var result = baseSet[METHOD_NAME](setLike);\n\n    return result.size === 1 && result.values().next().value === 4;\n  } catch (error) {\n    return false;\n  }\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar symmetricDifference = require('../internals/set-symmetric-difference');\nvar setMethodGetKeysBeforeCloning = require('../internals/set-method-get-keys-before-cloning-detection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar FORCED = !setMethodAcceptSetLike('symmetricDifference') || !setMethodGetKeysBeforeCloning('symmetricDifference');\n\n// `Set.prototype.symmetricDifference` method\n// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  symmetricDifference: symmetricDifference\n});\n", "'use strict';\nvar aSet = require('../internals/a-set');\nvar add = require('../internals/set-helpers').add;\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\n// `Set.prototype.union` method\n// https://tc39.es/ecma262/#sec-set.prototype.union\nmodule.exports = function union(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar union = require('../internals/set-union');\nvar setMethodGetKeysBeforeCloning = require('../internals/set-method-get-keys-before-cloning-detection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar FORCED = !setMethodAcceptSetLike('union') || !setMethodGetKeysBeforeCloning('union');\n\n// `Set.prototype.union` method\n// https://tc39.es/ecma262/#sec-set.prototype.union\n$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n  union: union\n});\n", "'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.set');\nrequire('../../modules/es.set.difference.v2');\nrequire('../../modules/es.set.intersection.v2');\nrequire('../../modules/es.set.is-disjoint-from.v2');\nrequire('../../modules/es.set.is-subset-of.v2');\nrequire('../../modules/es.set.is-superset-of.v2');\nrequire('../../modules/es.set.symmetric-difference.v2');\nrequire('../../modules/es.set.union.v2');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Set;\n", "'use strict';\nvar parent = require('../../es/set');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/set\");", "'use strict';\nrequire('../modules/es.array.iterator');\nrequire('../modules/es.string.iterator');\nvar getIterator = require('../internals/get-iterator');\n\nmodule.exports = getIterator;\n", "'use strict';\nvar parent = require('../es/get-iterator');\nrequire('../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n", "'use strict';\nvar parent = require('../stable/get-iterator');\n\nmodule.exports = parent;\n", "'use strict';\nvar parent = require('../actual/get-iterator');\n\nmodule.exports = parent;\n", "'use strict';\nmodule.exports = require('../full/get-iterator');\n", "module.exports = require(\"core-js-pure/features/get-iterator\");", "'use strict';\nvar arraySlice = require('../internals/array-slice');\n\nvar floor = Math.floor;\n\nvar sort = function (array, comparefn) {\n  var length = array.length;\n\n  if (length < 8) {\n    // insertion sort\n    var i = 1;\n    var element, j;\n\n    while (i < length) {\n      j = i;\n      element = array[i];\n      while (j && comparefn(array[j - 1], element) > 0) {\n        array[j] = array[--j];\n      }\n      if (j !== i++) array[j] = element;\n    }\n  } else {\n    // merge sort\n    var middle = floor(length / 2);\n    var left = sort(arraySlice(array, 0, middle), comparefn);\n    var right = sort(arraySlice(array, middle), comparefn);\n    var llength = left.length;\n    var rlength = right.length;\n    var lindex = 0;\n    var rindex = 0;\n\n    while (lindex < llength || rindex < rlength) {\n      array[lindex + rindex] = (lindex < llength && rindex < rlength)\n        ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n        : lindex < llength ? left[lindex++] : right[rindex++];\n    }\n  }\n\n  return array;\n};\n\nmodule.exports = sort;\n", "'use strict';\nvar userAgent = require('../internals/environment-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n", "'use strict';\nvar UA = require('../internals/environment-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n", "'use strict';\nvar userAgent = require('../internals/environment-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n", "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/environment-ff-version');\nvar IE_OR_EDGE = require('../internals/environment-is-ie-or-edge');\nvar V8 = require('../internals/environment-v8-version');\nvar WEBKIT = require('../internals/environment-webkit-version');\n\nvar test = [];\nvar nativeSort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n  test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n  test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n  // feature detection can be too slow, so check engines versions\n  if (V8) return V8 < 70;\n  if (FF && FF > 3) return;\n  if (IE_OR_EDGE) return true;\n  if (WEBKIT) return WEBKIT < 603;\n\n  var result = '';\n  var code, chr, value, index;\n\n  // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n  for (code = 65; code < 76; code++) {\n    chr = String.fromCharCode(code);\n\n    switch (code) {\n      case 66: case 69: case 70: case 72: value = 3; break;\n      case 68: case 71: value = 4; break;\n      default: value = 2;\n    }\n\n    for (index = 0; index < 47; index++) {\n      test.push({ k: chr + index, v: value });\n    }\n  }\n\n  test.sort(function (a, b) { return b.v - a.v; });\n\n  for (index = 0; index < test.length; index++) {\n    chr = test[index].k.charAt(0);\n    if (result.charAt(result.length - 1) !== chr) result += chr;\n  }\n\n  return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n  return function (x, y) {\n    if (y === undefined) return -1;\n    if (x === undefined) return 1;\n    if (comparefn !== undefined) return +comparefn(x, y) || 0;\n    return toString(x) > toString(y) ? 1 : -1;\n  };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  sort: function sort(comparefn) {\n    if (comparefn !== undefined) aCallable(comparefn);\n\n    var array = toObject(this);\n\n    if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn);\n\n    var items = [];\n    var arrayLength = lengthOfArrayLike(array);\n    var itemsLength, index;\n\n    for (index = 0; index < arrayLength; index++) {\n      if (index in array) push(items, array[index]);\n    }\n\n    internalSort(items, getSortCompare(comparefn));\n\n    itemsLength = lengthOfArrayLike(items);\n    index = 0;\n\n    while (index < itemsLength) array[index] = items[index++];\n    while (index < arrayLength) deletePropertyOrThrow(array, index++);\n\n    return array;\n  }\n});\n", "'use strict';\nrequire('../../../modules/es.array.sort');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'sort');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/sort');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.sort;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.sort) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/sort');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/sort\");", "'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\n\n// `Array.prototype.some` method\n// https://tc39.es/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n  some: function some(callbackfn /* , thisArg */) {\n    return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "'use strict';\nrequire('../../../modules/es.array.some');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'some');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/some');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.some;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.some) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/some');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/some\");", "'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'keys');\n", "'use strict';\nvar parent = require('../../../es/array/virtual/keys');\n\nmodule.exports = parent;\n", "'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/keys');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n  DOMTokenList: true,\n  NodeList: true\n};\n\nmodule.exports = function (it) {\n  var own = it.keys;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.keys)\n    || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n", "module.exports = require(\"core-js-pure/stable/instance/keys\");", "'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'values');\n", "'use strict';\nvar parent = require('../../../es/array/virtual/values');\n\nmodule.exports = parent;\n", "'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/values');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n  DOMTokenList: true,\n  NodeList: true\n};\n\nmodule.exports = function (it) {\n  var own = it.values;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.values)\n    || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n", "module.exports = require(\"core-js-pure/stable/instance/values\");", "'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'entries');\n", "'use strict';\nvar parent = require('../../../es/array/virtual/entries');\n\nmodule.exports = parent;\n", "'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/entries');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n  DOMTokenList: true,\n  NodeList: true\n};\n\nmodule.exports = function (it) {\n  var own = it.entries;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.entries)\n    || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n", "module.exports = require(\"core-js-pure/stable/instance/entries\");", "module.exports = require(\"core-js-pure/stable/object/define-property\");", "import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n    const uuid = unsafeStringify(arr, offset);\n    if (!validate(uuid)) {\n        throw TypeError('Stringified UUID is invalid');\n    }\n    return uuid;\n}\nexport default stringify;\n", "const rnds8 = new Uint8Array(16);\nexport default function rng() {\n    return crypto.getRandomValues(rnds8);\n}\n", "import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n    if (!buf && !options && crypto.randomUUID) {\n        return crypto.randomUUID();\n    }\n    return _v4(options, buf, offset);\n}\nfunction _v4(options, buf, offset) {\n    options = options || {};\n    const rnds = options.random ?? options.rng?.() ?? rng();\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = rnds[i];\n        }\n        return buf;\n    }\n    return unsafeStringify(rnds);\n}\nexport default v4;\n", "/**\n * vis-data\n * http://visjs.org/\n *\n * Manage unstructured data using DataSet. Add, update, and remove data, and listen for changes in the data.\n *\n * @version 8.0.4\n * @date    2026-05-07T14:01:00.852Z\n *\n * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n *\n * @license\n * vis.js is dual licensed under both\n *\n *   1. The Apache 2.0 License\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n *   and\n *\n *   2. The MIT License\n *      http://opensource.org/licenses/MIT\n *\n * vis.js may be distributed under either license.\n */\n\nimport { pureDeepObjectAssign } from 'vis-util/esnext/esm/vis-util.js';\nexport { DELETE } from 'vis-util/esnext/esm/vis-util.js';\nimport { v4 } from 'uuid';\n\n/**\n * Create new data pipe.\n * @param from - The source data set or data view.\n * @remarks\n * Example usage:\n * ```typescript\n * interface AppItem {\n *   whoami: string;\n *   appData: unknown;\n *   visData: VisItem;\n * }\n * interface VisItem {\n *   id: number;\n *   label: string;\n *   color: string;\n *   x: number;\n *   y: number;\n * }\n *\n * const ds1 = new DataSet<AppItem, \"whoami\">([], { fieldId: \"whoami\" });\n * const ds2 = new DataSet<VisItem, \"id\">();\n *\n * const pipe = createNewDataPipeFrom(ds1)\n *   .filter((item): boolean => item.enabled === true)\n *   .map<VisItem, \"id\">((item): VisItem => item.visData)\n *   .to(ds2);\n *\n * pipe.start();\n * ```\n * @returns A factory whose methods can be used to configure the pipe.\n */\nfunction createNewDataPipeFrom(from) {\n    return new DataPipeUnderConstruction(from);\n}\n/**\n * Internal implementation of the pipe. This should be accessible only through\n * `createNewDataPipeFrom` from the outside.\n * @typeParam SI - Source item type.\n * @typeParam SP - Source item type's id property name.\n * @typeParam TI - Target item type.\n * @typeParam TP - Target item type's id property name.\n */\nclass SimpleDataPipe {\n    _source;\n    _transformers;\n    _target;\n    /**\n     * Bound listeners for use with `DataInterface['on' | 'off']`.\n     */\n    _listeners = {\n        add: this._add.bind(this),\n        remove: this._remove.bind(this),\n        update: this._update.bind(this),\n    };\n    /**\n     * Create a new data pipe.\n     * @param source - The data set or data view that will be observed.\n     * @param transformers - An array of transforming functions to be used to\n     * filter or transform the items in the pipe.\n     * @param target - The data set or data view that will receive the items.\n     */\n    constructor(source, transformers, target) {\n        this._source = source;\n        this._transformers = transformers;\n        this._target = target;\n    }\n    /** @inheritDoc */\n    all() {\n        this._target.update(this._transformItems(this._source.get()));\n        return this;\n    }\n    /** @inheritDoc */\n    start() {\n        this._source.on(\"add\", this._listeners.add);\n        this._source.on(\"remove\", this._listeners.remove);\n        this._source.on(\"update\", this._listeners.update);\n        return this;\n    }\n    /** @inheritDoc */\n    stop() {\n        this._source.off(\"add\", this._listeners.add);\n        this._source.off(\"remove\", this._listeners.remove);\n        this._source.off(\"update\", this._listeners.update);\n        return this;\n    }\n    /**\n     * Apply the transformers to the items.\n     * @param items - The items to be transformed.\n     * @returns The transformed items.\n     */\n    _transformItems(items) {\n        return this._transformers.reduce((items, transform) => {\n            return transform(items);\n        }, items);\n    }\n    /**\n     * Handle an add event.\n     * @param _name - Ignored.\n     * @param payload - The payload containing the ids of the added items.\n     */\n    _add(_name, payload) {\n        if (payload == null) {\n            return;\n        }\n        this._target.add(this._transformItems(this._source.get(payload.items)));\n    }\n    /**\n     * Handle an update event.\n     * @param _name - Ignored.\n     * @param payload - The payload containing the ids of the updated items.\n     */\n    _update(_name, payload) {\n        if (payload == null) {\n            return;\n        }\n        this._target.update(this._transformItems(this._source.get(payload.items)));\n    }\n    /**\n     * Handle a remove event.\n     * @param _name - Ignored.\n     * @param payload - The payload containing the data of the removed items.\n     */\n    _remove(_name, payload) {\n        if (payload == null) {\n            return;\n        }\n        this._target.remove(this._transformItems(payload.oldData));\n    }\n}\n/**\n * Internal implementation of the pipe factory. This should be accessible\n * only through `createNewDataPipeFrom` from the outside.\n * @typeParam TI - Target item type.\n * @typeParam TP - Target item type's id property name.\n */\nclass DataPipeUnderConstruction {\n    _source;\n    /**\n     * Array transformers used to transform items within the pipe. This is typed\n     * as any for the sake of simplicity.\n     */\n    _transformers = [];\n    /**\n     * Create a new data pipe factory. This is an internal constructor that\n     * should never be called from outside of this file.\n     * @param source - The source data set or data view for this pipe.\n     */\n    constructor(source) {\n        this._source = source;\n    }\n    /**\n     * Filter the items.\n     * @param callback - A filtering function that returns true if given item\n     * should be piped and false if not.\n     * @returns This factory for further configuration.\n     */\n    filter(callback) {\n        this._transformers.push((input) => input.filter(callback));\n        return this;\n    }\n    /**\n     * Map each source item to a new type.\n     * @param callback - A mapping function that takes a source item and returns\n     * corresponding mapped item.\n     * @typeParam TI - Target item type.\n     * @typeParam TP - Target item type's id property name.\n     * @returns This factory for further configuration.\n     */\n    map(callback) {\n        this._transformers.push((input) => input.map(callback));\n        return this;\n    }\n    /**\n     * Map each source item to zero or more items of a new type.\n     * @param callback - A mapping function that takes a source item and returns\n     * an array of corresponding mapped items.\n     * @typeParam TI - Target item type.\n     * @typeParam TP - Target item type's id property name.\n     * @returns This factory for further configuration.\n     */\n    flatMap(callback) {\n        this._transformers.push((input) => input.flatMap(callback));\n        return this;\n    }\n    /**\n     * Connect this pipe to given data set.\n     * @param target - The data set that will receive the items from this pipe.\n     * @returns The pipe connected between given data sets and performing\n     * configured transformation on the processed items.\n     */\n    to(target) {\n        return new SimpleDataPipe(this._source, this._transformers, target);\n    }\n}\n\n/**\n * Determine whether a value can be used as an id.\n * @param value - Input value of unknown type.\n * @returns True if the value is valid id, false otherwise.\n */\nfunction isId(value) {\n    return typeof value === \"string\" || typeof value === \"number\";\n}\n\n/**\n * A queue.\n * @typeParam T - The type of method names to be replaced by queued versions.\n */\nclass Queue {\n    /** Delay in milliseconds. If defined the queue will be periodically flushed. */\n    delay;\n    /** Maximum number of entries in the queue before it will be flushed. */\n    max;\n    _queue = [];\n    _timeout = null;\n    _extended = null;\n    /**\n     * Construct a new Queue.\n     * @param options - Queue configuration.\n     */\n    constructor(options) {\n        // options\n        this.delay = null;\n        this.max = Infinity;\n        this.setOptions(options);\n    }\n    /**\n     * Update the configuration of the queue.\n     * @param options - Queue configuration.\n     */\n    setOptions(options) {\n        if (options && typeof options.delay !== \"undefined\") {\n            this.delay = options.delay;\n        }\n        if (options && typeof options.max !== \"undefined\") {\n            this.max = options.max;\n        }\n        this._flushIfNeeded();\n    }\n    /**\n     * Extend an object with queuing functionality.\n     * The object will be extended with a function flush, and the methods provided in options.replace will be replaced with queued ones.\n     * @param object - The object to be extended.\n     * @param options - Additional options.\n     * @returns The created queue.\n     */\n    static extend(object, options) {\n        const queue = new Queue(options);\n        if (object.flush !== undefined) {\n            throw new Error(\"Target object already has a property flush\");\n        }\n        object.flush = () => {\n            queue.flush();\n        };\n        const methods = [\n            {\n                name: \"flush\",\n                original: undefined,\n            },\n        ];\n        if (options && options.replace) {\n            for (let i = 0; i < options.replace.length; i++) {\n                const name = options.replace[i];\n                methods.push({\n                    name: name,\n                    // @TODO: better solution?\n                    original: object[name],\n                });\n                // @TODO: better solution?\n                queue.replace(object, name);\n            }\n        }\n        queue._extended = {\n            object: object,\n            methods: methods,\n        };\n        return queue;\n    }\n    /**\n     * Destroy the queue. The queue will first flush all queued actions, and in case it has extended an object, will restore the original object.\n     */\n    destroy() {\n        this.flush();\n        if (this._extended) {\n            const object = this._extended.object;\n            const methods = this._extended.methods;\n            for (let i = 0; i < methods.length; i++) {\n                const method = methods[i];\n                if (method.original) {\n                    // @TODO: better solution?\n                    object[method.name] = method.original;\n                }\n                else {\n                    // @TODO: better solution?\n                    delete object[method.name];\n                }\n            }\n            this._extended = null;\n        }\n    }\n    /**\n     * Replace a method on an object with a queued version.\n     * @param object - Object having the method.\n     * @param method - The method name.\n     */\n    replace(object, method) {\n        /* eslint-disable-next-line @typescript-eslint/no-this-alias -- Function this is necessary in the function bellow, so class this has to be saved into a variable here. */\n        const me = this;\n        const original = object[method];\n        if (!original) {\n            throw new Error(\"Method \" + method + \" undefined\");\n        }\n        object[method] = function (...args) {\n            // add this call to the queue\n            me.queue({\n                args: args,\n                fn: original,\n                context: this,\n            });\n        };\n    }\n    /**\n     * Queue a call.\n     * @param entry - The function or entry to be queued.\n     */\n    queue(entry) {\n        if (typeof entry === \"function\") {\n            this._queue.push({ fn: entry });\n        }\n        else {\n            this._queue.push(entry);\n        }\n        this._flushIfNeeded();\n    }\n    /**\n     * Check whether the queue needs to be flushed.\n     */\n    _flushIfNeeded() {\n        // flush when the maximum is exceeded.\n        if (this._queue.length > this.max) {\n            this.flush();\n        }\n        // flush after a period of inactivity when a delay is configured\n        if (this._timeout != null) {\n            clearTimeout(this._timeout);\n            this._timeout = null;\n        }\n        if (this.queue.length > 0 && typeof this.delay === \"number\") {\n            this._timeout = setTimeout(() => {\n                this.flush();\n            }, this.delay);\n        }\n    }\n    /**\n     * Flush all queued calls\n     */\n    flush() {\n        this._queue.splice(0).forEach((entry) => {\n            entry.fn.apply(entry.context || entry.fn, entry.args || []);\n        });\n    }\n}\n\n/**\n * {@link DataSet} code that can be reused in {@link DataView} or other similar implementations of {@link DataInterface}.\n * @typeParam Item - Item type that may or may not have an id.\n * @typeParam IdProp - Name of the property that contains the id.\n */\nclass DataSetPart {\n    _subscribers = {\n        \"*\": [],\n        add: [],\n        remove: [],\n        update: [],\n    };\n    /**\n     * Trigger an event\n     * @param event - Event name.\n     * @param payload - Event payload.\n     * @param senderId - Id of the sender.\n     */\n    _trigger(event, payload, senderId) {\n        if (event === \"*\") {\n            throw new Error(\"Cannot trigger event *\");\n        }\n        [...this._subscribers[event], ...this._subscribers[\"*\"]].forEach((subscriber) => {\n            subscriber(event, payload, senderId != null ? senderId : null);\n        });\n    }\n    /**\n     * Subscribe to an event, add an event listener.\n     * @remarks Non-function callbacks are ignored.\n     * @param event - Event name.\n     * @param callback - Callback method.\n     */\n    on(event, callback) {\n        if (typeof callback === \"function\") {\n            this._subscribers[event].push(callback);\n        }\n        // @TODO: Maybe throw for invalid callbacks?\n    }\n    /**\n     * Unsubscribe from an event, remove an event listener.\n     * @remarks If the same callback was subscribed more than once **all** occurences will be removed.\n     * @param event - Event name.\n     * @param callback - Callback method.\n     */\n    off(event, callback) {\n        this._subscribers[event] = this._subscribers[event].filter((subscriber) => subscriber !== callback);\n    }\n    /**\n     * @deprecated Use on instead (PS: DataView.subscribe === DataView.on).\n     */\n    subscribe = DataSetPart.prototype.on;\n    /**\n     * @deprecated Use off instead (PS: DataView.unsubscribe === DataView.off).\n     */\n    unsubscribe = DataSetPart.prototype.off;\n}\n\n/**\n * Data stream\n * @remarks\n * {@link DataStream} offers an always up to date stream of items from a {@link DataSet} or {@link DataView}.\n * That means that the stream is evaluated at the time of iteration, conversion to another data type or when {@link cache} is called, not when the {@link DataStream} was created.\n * Multiple invocations of for example {@link toItemArray} may yield different results (if the data source like for example {@link DataSet} gets modified).\n * @typeParam Item - The item type this stream is going to work with.\n */\nclass DataStream {\n    _pairs;\n    /**\n     * Create a new data stream.\n     * @param pairs - The id, item pairs.\n     */\n    constructor(pairs) {\n        this._pairs = pairs;\n    }\n    /**\n     * Return an iterable of key, value pairs for every entry in the stream.\n     */\n    *[Symbol.iterator]() {\n        for (const [id, item] of this._pairs) {\n            yield [id, item];\n        }\n    }\n    /**\n     * Return an iterable of key, value pairs for every entry in the stream.\n     */\n    *entries() {\n        for (const [id, item] of this._pairs) {\n            yield [id, item];\n        }\n    }\n    /**\n     * Return an iterable of keys in the stream.\n     */\n    *keys() {\n        for (const [id] of this._pairs) {\n            yield id;\n        }\n    }\n    /**\n     * Return an iterable of values in the stream.\n     */\n    *values() {\n        for (const [, item] of this._pairs) {\n            yield item;\n        }\n    }\n    /**\n     * Return an array containing all the ids in this stream.\n     * @remarks\n     * The array may contain duplicities.\n     * @returns The array with all ids from this stream.\n     */\n    toIdArray() {\n        return [...this._pairs].map((pair) => pair[0]);\n    }\n    /**\n     * Return an array containing all the items in this stream.\n     * @remarks\n     * The array may contain duplicities.\n     * @returns The array with all items from this stream.\n     */\n    toItemArray() {\n        return [...this._pairs].map((pair) => pair[1]);\n    }\n    /**\n     * Return an array containing all the entries in this stream.\n     * @remarks\n     * The array may contain duplicities.\n     * @returns The array with all entries from this stream.\n     */\n    toEntryArray() {\n        return [...this._pairs];\n    }\n    /**\n     * Return an object map containing all the items in this stream accessible by ids.\n     * @remarks\n     * In case of duplicate ids (coerced to string so `7 == '7'`) the last encoutered appears in the returned object.\n     * @returns The object map of all id → item pairs from this stream.\n     */\n    toObjectMap() {\n        const map = Object.create(null);\n        for (const [id, item] of this._pairs) {\n            map[id] = item;\n        }\n        return map;\n    }\n    /**\n     * Return a map containing all the items in this stream accessible by ids.\n     * @returns The map of all id → item pairs from this stream.\n     */\n    toMap() {\n        return new Map(this._pairs);\n    }\n    /**\n     * Return a set containing all the (unique) ids in this stream.\n     * @returns The set of all ids from this stream.\n     */\n    toIdSet() {\n        return new Set(this.toIdArray());\n    }\n    /**\n     * Return a set containing all the (unique) items in this stream.\n     * @returns The set of all items from this stream.\n     */\n    toItemSet() {\n        return new Set(this.toItemArray());\n    }\n    /**\n     * Cache the items from this stream.\n     * @remarks\n     * This method allows for items to be fetched immediatelly and used (possibly multiple times) later.\n     * It can also be used to optimize performance as {@link DataStream} would otherwise reevaluate everything upon each iteration.\n     *\n     * ## Example\n     * ```javascript\n     * const ds = new DataSet([…])\n     *\n     * const cachedStream = ds.stream()\n     *   .filter(…)\n     *   .sort(…)\n     *   .map(…)\n     *   .cached(…) // Data are fetched, processed and cached here.\n     *\n     * ds.clear()\n     * chachedStream // Still has all the items.\n     * ```\n     * @returns A new {@link DataStream} with cached items (detached from the original {@link DataSet}).\n     */\n    cache() {\n        return new DataStream([...this._pairs]);\n    }\n    /**\n     * Get the distinct values of given property.\n     * @param callback - The function that picks and possibly converts the property.\n     * @typeParam T - The type of the distinct value.\n     * @returns A set of all distinct properties.\n     */\n    distinct(callback) {\n        const set = new Set();\n        for (const [id, item] of this._pairs) {\n            set.add(callback(item, id));\n        }\n        return set;\n    }\n    /**\n     * Filter the items of the stream.\n     * @param callback - The function that decides whether an item will be included.\n     * @returns A new data stream with the filtered items.\n     */\n    filter(callback) {\n        const pairs = this._pairs;\n        return new DataStream({\n            *[Symbol.iterator]() {\n                for (const [id, item] of pairs) {\n                    if (callback(item, id)) {\n                        yield [id, item];\n                    }\n                }\n            },\n        });\n    }\n    /**\n     * Execute a callback for each item of the stream.\n     * @param callback - The function that will be invoked for each item.\n     */\n    forEach(callback) {\n        for (const [id, item] of this._pairs) {\n            callback(item, id);\n        }\n    }\n    /**\n     * Map the items into a different type.\n     * @param callback - The function that does the conversion.\n     * @typeParam Mapped - The type of the item after mapping.\n     * @returns A new data stream with the mapped items.\n     */\n    map(callback) {\n        const pairs = this._pairs;\n        return new DataStream({\n            *[Symbol.iterator]() {\n                for (const [id, item] of pairs) {\n                    yield [id, callback(item, id)];\n                }\n            },\n        });\n    }\n    /**\n     * Get the item with the maximum value of given property.\n     * @param callback - The function that picks and possibly converts the property.\n     * @returns The item with the maximum if found otherwise null.\n     */\n    max(callback) {\n        const iter = this._pairs[Symbol.iterator]();\n        let curr = iter.next();\n        if (curr.done) {\n            return null;\n        }\n        let maxItem = curr.value[1];\n        let maxValue = callback(curr.value[1], curr.value[0]);\n        while (!(curr = iter.next()).done) {\n            const [id, item] = curr.value;\n            const value = callback(item, id);\n            if (value > maxValue) {\n                maxValue = value;\n                maxItem = item;\n            }\n        }\n        return maxItem;\n    }\n    /**\n     * Get the item with the minimum value of given property.\n     * @param callback - The function that picks and possibly converts the property.\n     * @returns The item with the minimum if found otherwise null.\n     */\n    min(callback) {\n        const iter = this._pairs[Symbol.iterator]();\n        let curr = iter.next();\n        if (curr.done) {\n            return null;\n        }\n        let minItem = curr.value[1];\n        let minValue = callback(curr.value[1], curr.value[0]);\n        while (!(curr = iter.next()).done) {\n            const [id, item] = curr.value;\n            const value = callback(item, id);\n            if (value < minValue) {\n                minValue = value;\n                minItem = item;\n            }\n        }\n        return minItem;\n    }\n    /**\n     * Reduce the items into a single value.\n     * @param callback - The function that does the reduction.\n     * @param accumulator - The initial value of the accumulator.\n     * @typeParam T - The type of the accumulated value.\n     * @returns The reduced value.\n     */\n    reduce(callback, accumulator) {\n        for (const [id, item] of this._pairs) {\n            accumulator = callback(accumulator, item, id);\n        }\n        return accumulator;\n    }\n    /**\n     * Sort the items.\n     * @param callback - Item comparator.\n     * @returns A new stream with sorted items.\n     */\n    sort(callback) {\n        return new DataStream({\n            [Symbol.iterator]: () => [...this._pairs]\n                .sort(([idA, itemA], [idB, itemB]) => callback(itemA, itemB, idA, idB))[Symbol.iterator](),\n        });\n    }\n}\n\n/**\n * Add an id to given item if it doesn't have one already.\n * @remarks\n * The item will be modified.\n * @param item - The item that will have an id after a call to this function.\n * @param idProp - The key of the id property.\n * @typeParam Item - Item type that may or may not have an id.\n * @typeParam IdProp - Name of the property that contains the id.\n * @returns true\n */\nfunction ensureFullItem(item, idProp) {\n    if (item[idProp] == null) {\n        // generate an id\n        item[idProp] = v4();\n    }\n    return item;\n}\n/**\n * # DataSet\n *\n * Vis.js comes with a flexible DataSet, which can be used to hold and\n * manipulate unstructured data and listen for changes in the data. The DataSet\n * is key/value based. Data items can be added, updated and removed from the\n * DataSet, and one can subscribe to changes in the DataSet. The data in the\n * DataSet can be filtered and ordered. Data can be normalized when appending it\n * to the DataSet as well.\n *\n * ## Example\n *\n * The following example shows how to use a DataSet.\n *\n * ```javascript\n * // create a DataSet\n * var options = {};\n * var data = new vis.DataSet(options);\n *\n * // add items\n * // note that the data items can contain different properties and data formats\n * data.add([\n * {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},\n * {id: 2, text: 'item 2', date: '2013-06-23', group: 2},\n * {id: 3, text: 'item 3', date: '2013-06-25', group: 2},\n * {id: 4, text: 'item 4'}\n * ]);\n *\n * // subscribe to any change in the DataSet\n * data.on('*', function (event, properties, senderId) {\n * console.log('event', event, properties);\n * });\n *\n * // update an existing item\n * data.update({id: 2, group: 1});\n *\n * // remove an item\n * data.remove(4);\n *\n * // get all ids\n * var ids = data.getIds();\n * console.log('ids', ids);\n *\n * // get a specific item\n * var item1 = data.get(1);\n * console.log('item1', item1);\n *\n * // retrieve a filtered subset of the data\n * var items = data.get({\n * filter: function (item) {\n * return item.group == 1;\n * }\n * });\n * console.log('filtered items', items);\n * ```\n * @typeParam Item - Item type that may or may not have an id.\n * @typeParam IdProp - Name of the property that contains the id.\n */\nclass DataSet extends DataSetPart {\n    /** Flush all queued calls. */\n    flush;\n    /** @inheritDoc */\n    length;\n    /** @inheritDoc */\n    get idProp() {\n        return this._idProp;\n    }\n    _options;\n    _data;\n    _idProp;\n    _queue = null;\n    /**\n     * Construct a new DataSet.\n     * @param data - Initial data or options.\n     * @param options - Options (type error if data is also options).\n     */\n    constructor(data, options) {\n        super();\n        // correctly read optional arguments\n        if (data && !Array.isArray(data)) {\n            options = data;\n            data = [];\n        }\n        this._options = options || {};\n        this._data = new Map(); // map with data indexed by id\n        this.length = 0; // number of items in the DataSet\n        this._idProp = this._options.fieldId || \"id\"; // name of the field containing id\n        // add initial data when provided\n        if (data && data.length) {\n            this.add(data);\n        }\n        this.setOptions(options);\n    }\n    /**\n     * Set new options.\n     * @param options - The new options.\n     */\n    setOptions(options) {\n        if (options && options.queue !== undefined) {\n            if (options.queue === false) {\n                // delete queue if loaded\n                if (this._queue) {\n                    this._queue.destroy();\n                    this._queue = null;\n                }\n            }\n            else {\n                // create queue and update its options\n                if (!this._queue) {\n                    this._queue = Queue.extend(this, {\n                        replace: [\"add\", \"update\", \"remove\"],\n                    });\n                }\n                if (options.queue && typeof options.queue === \"object\") {\n                    this._queue.setOptions(options.queue);\n                }\n            }\n        }\n    }\n    /**\n     * Add a data item or an array with items.\n     *\n     * After the items are added to the DataSet, the DataSet will trigger an event `add`. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\n     *\n     * ## Example\n     *\n     * ```javascript\n     * // create a DataSet\n     * const data = new vis.DataSet()\n     *\n     * // add items\n     * const ids = data.add([\n     * { id: 1, text: 'item 1' },\n     * { id: 2, text: 'item 2' },\n     * { text: 'item without an id' }\n     * ])\n     *\n     * console.log(ids) // [1, 2, '<UUIDv4>']\n     * ```\n     * @param data - Items to be added (ids will be generated if missing).\n     * @param senderId - Sender id.\n     * @returns addedIds - Array with the ids (generated if not present) of the added items.\n     * @throws When an item with the same id as any of the added items already exists.\n     */\n    add(data, senderId) {\n        const addedIds = [];\n        let id;\n        if (Array.isArray(data)) {\n            // Array\n            const idsToAdd = data.map((d) => d[this._idProp]);\n            if (idsToAdd.some((id) => this._data.has(id))) {\n                throw new Error(\"A duplicate id was found in the parameter array.\");\n            }\n            for (let i = 0, len = data.length; i < len; i++) {\n                id = this._addItem(data[i]);\n                addedIds.push(id);\n            }\n        }\n        else if (data && typeof data === \"object\") {\n            // Single item\n            id = this._addItem(data);\n            addedIds.push(id);\n        }\n        else {\n            throw new Error(\"Unknown dataType\");\n        }\n        if (addedIds.length) {\n            this._trigger(\"add\", { items: addedIds }, senderId);\n        }\n        return addedIds;\n    }\n    /**\n     * Update existing items. When an item does not exist, it will be created.\n     * @remarks\n     * The provided properties will be merged in the existing item. When an item does not exist, it will be created.\n     *\n     * After the items are updated, the DataSet will trigger an event `add` for the added items, and an event `update`. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\n     *\n     * ## Example\n     *\n     * ```javascript\n     * // create a DataSet\n     * const data = new vis.DataSet([\n     *   { id: 1, text: 'item 1' },\n     *   { id: 2, text: 'item 2' },\n     *   { id: 3, text: 'item 3' }\n     * ])\n     *\n     * // update items\n     * const ids = data.update([\n     *   { id: 2, text: 'item 2 (updated)' },\n     *   { id: 4, text: 'item 4 (new)' }\n     * ])\n     *\n     * console.log(ids) // [2, 4]\n     * ```\n     *\n     * ## Warning for TypeScript users\n     * This method may introduce partial items into the data set. Use add or updateOnly instead for better type safety.\n     * @param data - Items to be updated (if the id is already present) or added (if the id is missing).\n     * @param senderId - Sender id.\n     * @returns updatedIds - The ids of the added (these may be newly generated if there was no id in the item from the data) or updated items.\n     * @throws When the supplied data is neither an item nor an array of items.\n     */\n    update(data, senderId) {\n        const addedIds = [];\n        const updatedIds = [];\n        const oldData = [];\n        const updatedData = [];\n        const idProp = this._idProp;\n        const addOrUpdate = (item) => {\n            const origId = item[idProp];\n            if (origId != null && this._data.has(origId)) {\n                const fullItem = item; // it has an id, therefore it is a fullitem\n                const oldItem = Object.assign({}, this._data.get(origId));\n                // update item\n                const id = this._updateItem(fullItem);\n                updatedIds.push(id);\n                updatedData.push(fullItem);\n                oldData.push(oldItem);\n            }\n            else {\n                // add new item\n                const id = this._addItem(item);\n                addedIds.push(id);\n            }\n        };\n        if (Array.isArray(data)) {\n            // Array\n            for (let i = 0, len = data.length; i < len; i++) {\n                if (data[i] && typeof data[i] === \"object\") {\n                    addOrUpdate(data[i]);\n                }\n                else {\n                    console.warn(\"Ignoring input item, which is not an object at index \" + i);\n                }\n            }\n        }\n        else if (data && typeof data === \"object\") {\n            // Single item\n            addOrUpdate(data);\n        }\n        else {\n            throw new Error(\"Unknown dataType\");\n        }\n        if (addedIds.length) {\n            this._trigger(\"add\", { items: addedIds }, senderId);\n        }\n        if (updatedIds.length) {\n            const props = { items: updatedIds, oldData: oldData, data: updatedData };\n            // TODO: remove deprecated property 'data' some day\n            //Object.defineProperty(props, 'data', {\n            //  'get': (function() {\n            //    console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\n            //    return updatedData;\n            //  }).bind(this)\n            //});\n            this._trigger(\"update\", props, senderId);\n        }\n        return addedIds.concat(updatedIds);\n    }\n    /**\n     * Update existing items. When an item does not exist, an error will be thrown.\n     * @remarks\n     * The provided properties will be deeply merged into the existing item.\n     * When an item does not exist (id not present in the data set or absent), an error will be thrown and nothing will be changed.\n     *\n     * After the items are updated, the DataSet will trigger an event `update`.\n     * When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\n     *\n     * ## Example\n     *\n     * ```javascript\n     * // create a DataSet\n     * const data = new vis.DataSet([\n     *   { id: 1, text: 'item 1' },\n     *   { id: 2, text: 'item 2' },\n     *   { id: 3, text: 'item 3' },\n     * ])\n     *\n     * // update items\n     * const ids = data.update([\n     *   { id: 2, text: 'item 2 (updated)' }, // works\n     *   // { id: 4, text: 'item 4 (new)' }, // would throw\n     *   // { text: 'item 4 (new)' }, // would also throw\n     * ])\n     *\n     * console.log(ids) // [2]\n     * ```\n     * @param data - Updates (the id and optionally other props) to the items in this data set.\n     * @param senderId - Sender id.\n     * @returns updatedIds - The ids of the updated items.\n     * @throws When the supplied data is neither an item nor an array of items, when the ids are missing.\n     */\n    updateOnly(data, senderId) {\n        if (!Array.isArray(data)) {\n            data = [data];\n        }\n        const updateEventData = data\n            .map((update) => {\n            const oldData = this._data.get(update[this._idProp]);\n            if (oldData == null) {\n                throw new Error(\"Updating non-existent items is not allowed.\");\n            }\n            return { oldData, update };\n        })\n            .map(({ oldData, update, }) => {\n            const id = oldData[this._idProp];\n            const updatedData = pureDeepObjectAssign(oldData, update);\n            this._data.set(id, updatedData);\n            return {\n                id,\n                oldData: oldData,\n                updatedData,\n            };\n        });\n        if (updateEventData.length) {\n            const props = {\n                items: updateEventData.map((value) => value.id),\n                oldData: updateEventData.map((value) => value.oldData),\n                data: updateEventData.map((value) => value.updatedData),\n            };\n            // TODO: remove deprecated property 'data' some day\n            //Object.defineProperty(props, 'data', {\n            //  'get': (function() {\n            //    console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\n            //    return updatedData;\n            //  }).bind(this)\n            //});\n            this._trigger(\"update\", props, senderId);\n            return props.items;\n        }\n        else {\n            return [];\n        }\n    }\n    /** @inheritDoc */\n    get(first, second) {\n        // @TODO: Woudn't it be better to split this into multiple methods?\n        // parse the arguments\n        let id = undefined;\n        let ids = undefined;\n        let options = undefined;\n        if (isId(first)) {\n            // get(id [, options])\n            id = first;\n            options = second;\n        }\n        else if (Array.isArray(first)) {\n            // get(ids [, options])\n            ids = first;\n            options = second;\n        }\n        else {\n            // get([, options])\n            options = first;\n        }\n        // determine the return type\n        const returnType = options && options.returnType === \"Object\" ? \"Object\" : \"Array\";\n        // @TODO: WTF is this? Or am I missing something?\n        // var returnType\n        // if (options && options.returnType) {\n        //   var allowedValues = ['Array', 'Object']\n        //   returnType =\n        //     allowedValues.indexOf(options.returnType) == -1\n        //       ? 'Array'\n        //       : options.returnType\n        // } else {\n        //   returnType = 'Array'\n        // }\n        // build options\n        const filter = options && options.filter;\n        const items = [];\n        let item = undefined;\n        let itemIds = undefined;\n        let itemId = undefined;\n        // convert items\n        if (id != null) {\n            // return a single item\n            item = this._data.get(id);\n            if (item && filter && !filter(item)) {\n                item = undefined;\n            }\n        }\n        else if (ids != null) {\n            // return a subset of items\n            for (let i = 0, len = ids.length; i < len; i++) {\n                item = this._data.get(ids[i]);\n                if (item != null && (!filter || filter(item))) {\n                    items.push(item);\n                }\n            }\n        }\n        else {\n            // return all items\n            itemIds = [...this._data.keys()];\n            for (let i = 0, len = itemIds.length; i < len; i++) {\n                itemId = itemIds[i];\n                item = this._data.get(itemId);\n                if (item != null && (!filter || filter(item))) {\n                    items.push(item);\n                }\n            }\n        }\n        // order the results\n        if (options && options.order && id == undefined) {\n            this._sort(items, options.order);\n        }\n        // filter fields of the items\n        if (options && options.fields) {\n            const fields = options.fields;\n            if (id != undefined && item != null) {\n                item = this._filterFields(item, fields);\n            }\n            else {\n                for (let i = 0, len = items.length; i < len; i++) {\n                    items[i] = this._filterFields(items[i], fields);\n                }\n            }\n        }\n        // return the results\n        if (returnType == \"Object\") {\n            const result = {};\n            for (let i = 0, len = items.length; i < len; i++) {\n                const resultant = items[i];\n                // @TODO: Shoudn't this be this._fieldId?\n                // result[resultant.id] = resultant\n                const id = resultant[this._idProp];\n                result[id] = resultant;\n            }\n            return result;\n        }\n        else {\n            if (id != null) {\n                // a single item\n                return item ?? null;\n            }\n            else {\n                // just return our array\n                return items;\n            }\n        }\n    }\n    /** @inheritDoc */\n    getIds(options) {\n        const data = this._data;\n        const filter = options && options.filter;\n        const order = options && options.order;\n        const itemIds = [...data.keys()];\n        const ids = [];\n        if (filter) {\n            // get filtered items\n            if (order) {\n                // create ordered list\n                const items = [];\n                for (let i = 0, len = itemIds.length; i < len; i++) {\n                    const id = itemIds[i];\n                    const item = this._data.get(id);\n                    if (item != null && filter(item)) {\n                        items.push(item);\n                    }\n                }\n                this._sort(items, order);\n                for (let i = 0, len = items.length; i < len; i++) {\n                    ids.push(items[i][this._idProp]);\n                }\n            }\n            else {\n                // create unordered list\n                for (let i = 0, len = itemIds.length; i < len; i++) {\n                    const id = itemIds[i];\n                    const item = this._data.get(id);\n                    if (item != null && filter(item)) {\n                        ids.push(item[this._idProp]);\n                    }\n                }\n            }\n        }\n        else {\n            // get all items\n            if (order) {\n                // create an ordered list\n                const items = [];\n                for (let i = 0, len = itemIds.length; i < len; i++) {\n                    const id = itemIds[i];\n                    items.push(data.get(id));\n                }\n                this._sort(items, order);\n                for (let i = 0, len = items.length; i < len; i++) {\n                    ids.push(items[i][this._idProp]);\n                }\n            }\n            else {\n                // create unordered list\n                for (let i = 0, len = itemIds.length; i < len; i++) {\n                    const id = itemIds[i];\n                    const item = data.get(id);\n                    if (item != null) {\n                        ids.push(item[this._idProp]);\n                    }\n                }\n            }\n        }\n        return ids;\n    }\n    /** @inheritDoc */\n    getDataSet() {\n        return this;\n    }\n    /** @inheritDoc */\n    forEach(callback, options) {\n        const filter = options && options.filter;\n        const data = this._data;\n        const itemIds = [...data.keys()];\n        if (options && options.order) {\n            // execute forEach on ordered list\n            const items = this.get(options);\n            for (let i = 0, len = items.length; i < len; i++) {\n                const item = items[i];\n                const id = item[this._idProp];\n                callback(item, id);\n            }\n        }\n        else {\n            // unordered\n            for (let i = 0, len = itemIds.length; i < len; i++) {\n                const id = itemIds[i];\n                const item = this._data.get(id);\n                if (item != null && (!filter || filter(item))) {\n                    callback(item, id);\n                }\n            }\n        }\n    }\n    /** @inheritDoc */\n    map(callback, options) {\n        const filter = options && options.filter;\n        const mappedItems = [];\n        const data = this._data;\n        const itemIds = [...data.keys()];\n        // convert and filter items\n        for (let i = 0, len = itemIds.length; i < len; i++) {\n            const id = itemIds[i];\n            const item = this._data.get(id);\n            if (item != null && (!filter || filter(item))) {\n                mappedItems.push(callback(item, id));\n            }\n        }\n        // order items\n        if (options && options.order) {\n            this._sort(mappedItems, options.order);\n        }\n        return mappedItems;\n    }\n    /**\n     * Filter the fields of an item.\n     * @param item - The item whose fields should be filtered.\n     * @param fields - The names of the fields that will be kept.\n     * @typeParam K - Field name type.\n     * @returns The item without any additional fields.\n     */\n    _filterFields(item, fields) {\n        if (!item) {\n            // item is null\n            return item;\n        }\n        return (Array.isArray(fields)\n            ? // Use the supplied array\n                fields\n            : // Use the keys of the supplied object\n                Object.keys(fields)).reduce((filteredItem, field) => {\n            filteredItem[field] = item[field];\n            return filteredItem;\n        }, {});\n    }\n    /**\n     * Sort the provided array with items.\n     * @param items - Items to be sorted in place.\n     * @param order - A field name or custom sort function.\n     * @typeParam T - The type of the items in the items array.\n     */\n    _sort(items, order) {\n        if (typeof order === \"string\") {\n            // order by provided field name\n            const name = order; // field name\n            items.sort((a, b) => {\n                // @TODO: How to treat missing properties?\n                const av = a[name];\n                const bv = b[name];\n                return av > bv ? 1 : av < bv ? -1 : 0;\n            });\n        }\n        else if (typeof order === \"function\") {\n            // order by sort function\n            items.sort(order);\n        }\n        else {\n            // TODO: extend order by an Object {field:string, direction:string}\n            //       where direction can be 'asc' or 'desc'\n            throw new TypeError(\"Order must be a function or a string\");\n        }\n    }\n    /**\n     * Remove an item or multiple items by “reference” (only the id is used) or by id.\n     *\n     * The method ignores removal of non-existing items, and returns an array containing the ids of the items which are actually removed from the DataSet.\n     *\n     * After the items are removed, the DataSet will trigger an event `remove` for the removed items. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\n     *\n     * ## Example\n     * ```javascript\n     * // create a DataSet\n     * const data = new vis.DataSet([\n     * { id: 1, text: 'item 1' },\n     * { id: 2, text: 'item 2' },\n     * { id: 3, text: 'item 3' }\n     * ])\n     *\n     * // remove items\n     * const ids = data.remove([2, { id: 3 }, 4])\n     *\n     * console.log(ids) // [2, 3]\n     * ```\n     * @param id - One or more items or ids of items to be removed.\n     * @param senderId - Sender id.\n     * @returns The ids of the removed items.\n     */\n    remove(id, senderId) {\n        const removedIds = [];\n        const removedItems = [];\n        // force everything to be an array for simplicity\n        const ids = Array.isArray(id) ? id : [id];\n        for (let i = 0, len = ids.length; i < len; i++) {\n            const item = this._remove(ids[i]);\n            if (item) {\n                const itemId = item[this._idProp];\n                if (itemId != null) {\n                    removedIds.push(itemId);\n                    removedItems.push(item);\n                }\n            }\n        }\n        if (removedIds.length) {\n            this._trigger(\"remove\", { items: removedIds, oldData: removedItems }, senderId);\n        }\n        return removedIds;\n    }\n    /**\n     * Remove an item by its id or reference.\n     * @param id - Id of an item or the item itself.\n     * @returns The removed item if removed, null otherwise.\n     */\n    _remove(id) {\n        // @TODO: It origianlly returned the item although the docs say id.\n        // The code expects the item, so probably an error in the docs.\n        let ident;\n        // confirm the id to use based on the args type\n        if (isId(id)) {\n            ident = id;\n        }\n        else if (id && typeof id === \"object\") {\n            ident = id[this._idProp]; // look for the identifier field using ._idProp\n        }\n        // do the removing if the item is found\n        if (ident != null && this._data.has(ident)) {\n            const item = this._data.get(ident) || null;\n            this._data.delete(ident);\n            --this.length;\n            return item;\n        }\n        return null;\n    }\n    /**\n     * Clear the entire data set.\n     *\n     * After the items are removed, the {@link DataSet} will trigger an event `remove` for all removed items. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\n     * @param senderId - Sender id.\n     * @returns removedIds - The ids of all removed items.\n     */\n    clear(senderId) {\n        const ids = [...this._data.keys()];\n        const items = [];\n        for (let i = 0, len = ids.length; i < len; i++) {\n            items.push(this._data.get(ids[i]));\n        }\n        this._data.clear();\n        this.length = 0;\n        this._trigger(\"remove\", { items: ids, oldData: items }, senderId);\n        return ids;\n    }\n    /**\n     * Find the item with maximum value of a specified field.\n     * @param field - Name of the property that should be searched for max value.\n     * @returns Item containing max value, or null if no items.\n     */\n    max(field) {\n        let max = null;\n        let maxField = null;\n        for (const item of this._data.values()) {\n            const itemField = item[field];\n            if (typeof itemField === \"number\" &&\n                (maxField == null || itemField > maxField)) {\n                max = item;\n                maxField = itemField;\n            }\n        }\n        return max || null;\n    }\n    /**\n     * Find the item with minimum value of a specified field.\n     * @param field - Name of the property that should be searched for min value.\n     * @returns Item containing min value, or null if no items.\n     */\n    min(field) {\n        let min = null;\n        let minField = null;\n        for (const item of this._data.values()) {\n            const itemField = item[field];\n            if (typeof itemField === \"number\" &&\n                (minField == null || itemField < minField)) {\n                min = item;\n                minField = itemField;\n            }\n        }\n        return min || null;\n    }\n    /**\n     * Find all distinct values of a specified field\n     * @param prop - The property name whose distinct values should be returned.\n     * @returns Unordered array containing all distinct values. Items without specified property are ignored.\n     */\n    distinct(prop) {\n        const data = this._data;\n        const itemIds = [...data.keys()];\n        const values = [];\n        let count = 0;\n        for (let i = 0, len = itemIds.length; i < len; i++) {\n            const id = itemIds[i];\n            const item = data.get(id);\n            const value = item[prop];\n            let exists = false;\n            for (let j = 0; j < count; j++) {\n                if (values[j] == value) {\n                    exists = true;\n                    break;\n                }\n            }\n            if (!exists && value !== undefined) {\n                values[count] = value;\n                count++;\n            }\n        }\n        return values;\n    }\n    /**\n     * Add a single item. Will fail when an item with the same id already exists.\n     * @param item - A new item to be added.\n     * @returns Added item's id. An id is generated when it is not present in the item.\n     */\n    _addItem(item) {\n        const fullItem = ensureFullItem(item, this._idProp);\n        const id = fullItem[this._idProp];\n        // check whether this id is already taken\n        if (this._data.has(id)) {\n            // item already exists\n            throw new Error(\"Cannot add item: item with id \" + id + \" already exists\");\n        }\n        this._data.set(id, fullItem);\n        ++this.length;\n        return id;\n    }\n    /**\n     * Update a single item: merge with existing item.\n     * Will fail when the item has no id, or when there does not exist an item with the same id.\n     * @param update - The new item\n     * @returns The id of the updated item.\n     */\n    _updateItem(update) {\n        const id = update[this._idProp];\n        if (id == null) {\n            throw new Error(\"Cannot update item: item has no id (item: \" +\n                JSON.stringify(update) +\n                \")\");\n        }\n        const item = this._data.get(id);\n        if (!item) {\n            // item doesn't exist\n            throw new Error(\"Cannot update item: no item with id \" + id + \" found\");\n        }\n        this._data.set(id, { ...item, ...update });\n        return id;\n    }\n    /** @inheritDoc */\n    stream(ids) {\n        if (ids) {\n            const data = this._data;\n            return new DataStream({\n                *[Symbol.iterator]() {\n                    for (const id of ids) {\n                        const item = data.get(id);\n                        if (item != null) {\n                            yield [id, item];\n                        }\n                    }\n                },\n            });\n        }\n        else {\n            return new DataStream({\n                [Symbol.iterator]: this._data.entries.bind(this._data),\n            });\n        }\n    }\n}\n\n/**\n * DataView\n *\n * A DataView offers a filtered and/or formatted view on a DataSet. One can subscribe to changes in a DataView, and easily get filtered or formatted data without having to specify filters and field types all the time.\n *\n * ## Example\n * ```javascript\n * // create a DataSet\n * var data = new vis.DataSet();\n * data.add([\n * {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},\n * {id: 2, text: 'item 2', date: '2013-06-23', group: 2},\n * {id: 3, text: 'item 3', date: '2013-06-25', group: 2},\n * {id: 4, text: 'item 4'}\n * ]);\n *\n * // create a DataView\n * // the view will only contain items having a property group with value 1,\n * // and will only output fields id, text, and date.\n * var view = new vis.DataView(data, {\n * filter: function (item) {\n * return (item.group == 1);\n * },\n * fields: ['id', 'text', 'date']\n * });\n *\n * // subscribe to any change in the DataView\n * view.on('*', function (event, properties, senderId) {\n * console.log('event', event, properties);\n * });\n *\n * // update an item in the data set\n * data.update({id: 2, group: 1});\n *\n * // get all ids in the view\n * var ids = view.getIds();\n * console.log('ids', ids); // will output [1, 2]\n *\n * // get all items in the view\n * var items = view.get();\n * ```\n * @typeParam Item - Item type that may or may not have an id.\n * @typeParam IdProp - Name of the property that contains the id.\n */\nclass DataView extends DataSetPart {\n    /** @inheritDoc */\n    length = 0;\n    /** @inheritDoc */\n    get idProp() {\n        return this.getDataSet().idProp;\n    }\n    _listener;\n    _data; // constructor → setData\n    _ids = new Set(); // ids of the items currently in memory (just contains a boolean true)\n    _options;\n    /**\n     * Create a DataView.\n     * @param data - The instance containing data (directly or indirectly).\n     * @param options - Options to configure this data view.\n     */\n    constructor(data, options) {\n        super();\n        this._options = options || {};\n        this._listener = this._onEvent.bind(this);\n        this.setData(data);\n    }\n    // TODO: implement a function .config() to dynamically update things like configured filter\n    // and trigger changes accordingly\n    /**\n     * Set a data source for the view.\n     * @param data - The instance containing data (directly or indirectly).\n     * @remarks\n     * Note that when the data view is bound to a data set it won't be garbage\n     * collected unless the data set is too. Use `dataView.setData(null)` or\n     * `dataView.dispose()` to enable garbage collection before you lose the last\n     * reference.\n     */\n    setData(data) {\n        if (this._data) {\n            // unsubscribe from current dataset\n            if (this._data.off) {\n                this._data.off(\"*\", this._listener);\n            }\n            // trigger a remove of all items in memory\n            const ids = this._data.getIds({ filter: this._options.filter });\n            const items = this._data.get(ids);\n            this._ids.clear();\n            this.length = 0;\n            this._trigger(\"remove\", { items: ids, oldData: items });\n        }\n        if (data != null) {\n            this._data = data;\n            // trigger an add of all added items\n            const ids = this._data.getIds({ filter: this._options.filter });\n            for (let i = 0, len = ids.length; i < len; i++) {\n                const id = ids[i];\n                this._ids.add(id);\n            }\n            this.length = ids.length;\n            this._trigger(\"add\", { items: ids });\n        }\n        else {\n            this._data = new DataSet();\n        }\n        // subscribe to new dataset\n        if (this._data.on) {\n            this._data.on(\"*\", this._listener);\n        }\n    }\n    /**\n     * Refresh the DataView.\n     * Useful when the DataView has a filter function containing a variable parameter.\n     */\n    refresh() {\n        const ids = this._data.getIds({\n            filter: this._options.filter,\n        });\n        const oldIds = [...this._ids];\n        const newIds = {};\n        const addedIds = [];\n        const removedIds = [];\n        const removedItems = [];\n        // check for additions\n        for (let i = 0, len = ids.length; i < len; i++) {\n            const id = ids[i];\n            newIds[id] = true;\n            if (!this._ids.has(id)) {\n                addedIds.push(id);\n                this._ids.add(id);\n            }\n        }\n        // check for removals\n        for (let i = 0, len = oldIds.length; i < len; i++) {\n            const id = oldIds[i];\n            const item = this._data.get(id);\n            if (item == null) {\n                // @TODO: Investigate.\n                // Doesn't happen during tests or examples.\n                // Is it really impossible or could it eventually happen?\n                // How to handle it if it does? The types guarantee non-nullable items.\n                console.error(\"If you see this, report it please.\");\n            }\n            else if (!newIds[id]) {\n                removedIds.push(id);\n                removedItems.push(item);\n                this._ids.delete(id);\n            }\n        }\n        this.length += addedIds.length - removedIds.length;\n        // trigger events\n        if (addedIds.length) {\n            this._trigger(\"add\", { items: addedIds });\n        }\n        if (removedIds.length) {\n            this._trigger(\"remove\", { items: removedIds, oldData: removedItems });\n        }\n    }\n    /** @inheritDoc */\n    get(first, second) {\n        if (this._data == null) {\n            return null;\n        }\n        // parse the arguments\n        let ids = null;\n        let options;\n        if (isId(first) || Array.isArray(first)) {\n            ids = first;\n            options = second;\n        }\n        else {\n            options = first;\n        }\n        // extend the options with the default options and provided options\n        const viewOptions = Object.assign({}, this._options, options);\n        // create a combined filter method when needed\n        const thisFilter = this._options.filter;\n        const optionsFilter = options && options.filter;\n        if (thisFilter && optionsFilter) {\n            viewOptions.filter = (item) => {\n                return thisFilter(item) && optionsFilter(item);\n            };\n        }\n        if (ids == null) {\n            return this._data.get(viewOptions);\n        }\n        else {\n            return this._data.get(ids, viewOptions);\n        }\n    }\n    /** @inheritDoc */\n    getIds(options) {\n        if (this._data.length) {\n            const defaultFilter = this._options.filter;\n            const optionsFilter = options != null ? options.filter : null;\n            let filter;\n            if (optionsFilter) {\n                if (defaultFilter) {\n                    filter = (item) => {\n                        return defaultFilter(item) && optionsFilter(item);\n                    };\n                }\n                else {\n                    filter = optionsFilter;\n                }\n            }\n            else {\n                filter = defaultFilter;\n            }\n            return this._data.getIds({\n                filter: filter,\n                order: options && options.order,\n            });\n        }\n        else {\n            return [];\n        }\n    }\n    /** @inheritDoc */\n    forEach(callback, options) {\n        if (this._data) {\n            const defaultFilter = this._options.filter;\n            const optionsFilter = options && options.filter;\n            let filter;\n            if (optionsFilter) {\n                if (defaultFilter) {\n                    filter = function (item) {\n                        return defaultFilter(item) && optionsFilter(item);\n                    };\n                }\n                else {\n                    filter = optionsFilter;\n                }\n            }\n            else {\n                filter = defaultFilter;\n            }\n            this._data.forEach(callback, {\n                filter: filter,\n                order: options && options.order,\n            });\n        }\n    }\n    /** @inheritDoc */\n    map(callback, options) {\n        if (this._data) {\n            const defaultFilter = this._options.filter;\n            const optionsFilter = options && options.filter;\n            let filter;\n            if (optionsFilter) {\n                if (defaultFilter) {\n                    filter = (item) => {\n                        return defaultFilter(item) && optionsFilter(item);\n                    };\n                }\n                else {\n                    filter = optionsFilter;\n                }\n            }\n            else {\n                filter = defaultFilter;\n            }\n            return this._data.map(callback, {\n                filter: filter,\n                order: options && options.order,\n            });\n        }\n        else {\n            return [];\n        }\n    }\n    /** @inheritDoc */\n    getDataSet() {\n        return this._data.getDataSet();\n    }\n    /** @inheritDoc */\n    stream(ids) {\n        return this._data.stream(ids || {\n            [Symbol.iterator]: this._ids.keys.bind(this._ids),\n        });\n    }\n    /**\n     * Render the instance unusable prior to garbage collection.\n     * @remarks\n     * The intention of this method is to help discover scenarios where the data\n     * view is being used when the programmer thinks it has been garbage collected\n     * already. It's stricter version of `dataView.setData(null)`.\n     */\n    dispose() {\n        if (this._data?.off) {\n            this._data.off(\"*\", this._listener);\n        }\n        const message = \"This data view has already been disposed of.\";\n        const replacement = {\n            get: () => {\n                throw new Error(message);\n            },\n            set: () => {\n                throw new Error(message);\n            },\n            configurable: false,\n        };\n        for (const key of Reflect.ownKeys(DataView.prototype)) {\n            Object.defineProperty(this, key, replacement);\n        }\n    }\n    /**\n     * Event listener. Will propagate all events from the connected data set to the subscribers of the DataView, but will filter the items and only trigger when there are changes in the filtered data set.\n     * @param event - The name of the event.\n     * @param params - Parameters of the event.\n     * @param senderId - Id supplied by the sender.\n     */\n    _onEvent(event, params, senderId) {\n        if (!params || !params.items || !this._data) {\n            return;\n        }\n        const ids = params.items;\n        const addedIds = [];\n        const updatedIds = [];\n        const removedIds = [];\n        const oldItems = [];\n        const updatedItems = [];\n        const removedItems = [];\n        switch (event) {\n            case \"add\":\n                // filter the ids of the added items\n                for (let i = 0, len = ids.length; i < len; i++) {\n                    const id = ids[i];\n                    const item = this.get(id);\n                    if (item) {\n                        this._ids.add(id);\n                        addedIds.push(id);\n                    }\n                }\n                break;\n            case \"update\":\n                // determine the event from the views viewpoint: an updated\n                // item can be added, updated, or removed from this view.\n                for (let i = 0, len = ids.length; i < len; i++) {\n                    const id = ids[i];\n                    const item = this.get(id);\n                    if (item) {\n                        if (this._ids.has(id)) {\n                            updatedIds.push(id);\n                            updatedItems.push(params.data[i]);\n                            oldItems.push(params.oldData[i]);\n                        }\n                        else {\n                            this._ids.add(id);\n                            addedIds.push(id);\n                        }\n                    }\n                    else {\n                        if (this._ids.has(id)) {\n                            this._ids.delete(id);\n                            removedIds.push(id);\n                            removedItems.push(params.oldData[i]);\n                        }\n                    }\n                }\n                break;\n            case \"remove\":\n                // filter the ids of the removed items\n                for (let i = 0, len = ids.length; i < len; i++) {\n                    const id = ids[i];\n                    if (this._ids.has(id)) {\n                        this._ids.delete(id);\n                        removedIds.push(id);\n                        removedItems.push(params.oldData[i]);\n                    }\n                }\n                break;\n        }\n        this.length += addedIds.length - removedIds.length;\n        if (addedIds.length) {\n            this._trigger(\"add\", { items: addedIds }, senderId);\n        }\n        if (updatedIds.length) {\n            this._trigger(\"update\", { items: updatedIds, oldData: oldItems, data: updatedItems }, senderId);\n        }\n        if (removedIds.length) {\n            this._trigger(\"remove\", { items: removedIds, oldData: removedItems }, senderId);\n        }\n    }\n}\n\n/**\n * Check that given value is compatible with Vis Data Set interface.\n * @param idProp - The expected property to contain item id.\n * @param v - The value to be tested.\n * @returns True if all expected values and methods match, false otherwise.\n */\nfunction isDataSetLike(idProp, v) {\n    return (typeof v === \"object\" &&\n        v !== null &&\n        idProp === v.idProp &&\n        typeof v.add === \"function\" &&\n        typeof v.clear === \"function\" &&\n        typeof v.distinct === \"function\" &&\n        typeof v.forEach === \"function\" &&\n        typeof v.get === \"function\" &&\n        typeof v.getDataSet === \"function\" &&\n        typeof v.getIds === \"function\" &&\n        typeof v.length === \"number\" &&\n        typeof v.map === \"function\" &&\n        typeof v.max === \"function\" &&\n        typeof v.min === \"function\" &&\n        typeof v.off === \"function\" &&\n        typeof v.on === \"function\" &&\n        typeof v.remove === \"function\" &&\n        typeof v.setOptions === \"function\" &&\n        typeof v.stream === \"function\" &&\n        typeof v.update === \"function\" &&\n        typeof v.updateOnly === \"function\");\n}\n\n/**\n * Check that given value is compatible with Vis Data View interface.\n * @param idProp - The expected property to contain item id.\n * @param v - The value to be tested.\n * @returns True if all expected values and methods match, false otherwise.\n */\nfunction isDataViewLike(idProp, v) {\n    return (typeof v === \"object\" &&\n        v !== null &&\n        idProp === v.idProp &&\n        typeof v.forEach === \"function\" &&\n        typeof v.get === \"function\" &&\n        typeof v.getDataSet === \"function\" &&\n        typeof v.getIds === \"function\" &&\n        typeof v.length === \"number\" &&\n        typeof v.map === \"function\" &&\n        typeof v.off === \"function\" &&\n        typeof v.on === \"function\" &&\n        typeof v.stream === \"function\" &&\n        isDataSetLike(idProp, v.getDataSet()));\n}\n\nexport { DataSet, DataStream, DataView, Queue, createNewDataPipeFrom, isDataSetLike, isDataViewLike };\n//# sourceMappingURL=vis-data.mjs.map\n", "import bundledMoment from \"moment\";\n\n// Check if Moment.js is already loaded in the browser window, if so, use this\n// instance, else use bundled Moment.js.\nconst moment =\n  (typeof window !== \"undefined\" && window[\"moment\"]) || bundledMoment;\n\nexport default moment;\n", "/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nfunction getDefaultWhiteList () {\n  // 白名单值说明：\n  // true: 允许该属性\n  // Function: function (val) { } 返回true表示允许该属性，其他值均表示不允许\n  // RegExp: regexp.test(val) 返回true表示允许该属性，其他值均表示不允许\n  // 除上面列出的值外均表示不允许\n  var whiteList = {};\n\n  whiteList['align-content'] = false; // default: auto\n  whiteList['align-items'] = false; // default: auto\n  whiteList['align-self'] = false; // default: auto\n  whiteList['alignment-adjust'] = false; // default: auto\n  whiteList['alignment-baseline'] = false; // default: baseline\n  whiteList['all'] = false; // default: depending on individual properties\n  whiteList['anchor-point'] = false; // default: none\n  whiteList['animation'] = false; // default: depending on individual properties\n  whiteList['animation-delay'] = false; // default: 0\n  whiteList['animation-direction'] = false; // default: normal\n  whiteList['animation-duration'] = false; // default: 0\n  whiteList['animation-fill-mode'] = false; // default: none\n  whiteList['animation-iteration-count'] = false; // default: 1\n  whiteList['animation-name'] = false; // default: none\n  whiteList['animation-play-state'] = false; // default: running\n  whiteList['animation-timing-function'] = false; // default: ease\n  whiteList['azimuth'] = false; // default: center\n  whiteList['backface-visibility'] = false; // default: visible\n  whiteList['background'] = true; // default: depending on individual properties\n  whiteList['background-attachment'] = true; // default: scroll\n  whiteList['background-clip'] = true; // default: border-box\n  whiteList['background-color'] = true; // default: transparent\n  whiteList['background-image'] = true; // default: none\n  whiteList['background-origin'] = true; // default: padding-box\n  whiteList['background-position'] = true; // default: 0% 0%\n  whiteList['background-repeat'] = true; // default: repeat\n  whiteList['background-size'] = true; // default: auto\n  whiteList['baseline-shift'] = false; // default: baseline\n  whiteList['binding'] = false; // default: none\n  whiteList['bleed'] = false; // default: 6pt\n  whiteList['bookmark-label'] = false; // default: content()\n  whiteList['bookmark-level'] = false; // default: none\n  whiteList['bookmark-state'] = false; // default: open\n  whiteList['border'] = true; // default: depending on individual properties\n  whiteList['border-bottom'] = true; // default: depending on individual properties\n  whiteList['border-bottom-color'] = true; // default: current color\n  whiteList['border-bottom-left-radius'] = true; // default: 0\n  whiteList['border-bottom-right-radius'] = true; // default: 0\n  whiteList['border-bottom-style'] = true; // default: none\n  whiteList['border-bottom-width'] = true; // default: medium\n  whiteList['border-collapse'] = true; // default: separate\n  whiteList['border-color'] = true; // default: depending on individual properties\n  whiteList['border-image'] = true; // default: none\n  whiteList['border-image-outset'] = true; // default: 0\n  whiteList['border-image-repeat'] = true; // default: stretch\n  whiteList['border-image-slice'] = true; // default: 100%\n  whiteList['border-image-source'] = true; // default: none\n  whiteList['border-image-width'] = true; // default: 1\n  whiteList['border-left'] = true; // default: depending on individual properties\n  whiteList['border-left-color'] = true; // default: current color\n  whiteList['border-left-style'] = true; // default: none\n  whiteList['border-left-width'] = true; // default: medium\n  whiteList['border-radius'] = true; // default: 0\n  whiteList['border-right'] = true; // default: depending on individual properties\n  whiteList['border-right-color'] = true; // default: current color\n  whiteList['border-right-style'] = true; // default: none\n  whiteList['border-right-width'] = true; // default: medium\n  whiteList['border-spacing'] = true; // default: 0\n  whiteList['border-style'] = true; // default: depending on individual properties\n  whiteList['border-top'] = true; // default: depending on individual properties\n  whiteList['border-top-color'] = true; // default: current color\n  whiteList['border-top-left-radius'] = true; // default: 0\n  whiteList['border-top-right-radius'] = true; // default: 0\n  whiteList['border-top-style'] = true; // default: none\n  whiteList['border-top-width'] = true; // default: medium\n  whiteList['border-width'] = true; // default: depending on individual properties\n  whiteList['bottom'] = false; // default: auto\n  whiteList['box-decoration-break'] = true; // default: slice\n  whiteList['box-shadow'] = true; // default: none\n  whiteList['box-sizing'] = true; // default: content-box\n  whiteList['box-snap'] = true; // default: none\n  whiteList['box-suppress'] = true; // default: show\n  whiteList['break-after'] = true; // default: auto\n  whiteList['break-before'] = true; // default: auto\n  whiteList['break-inside'] = true; // default: auto\n  whiteList['caption-side'] = false; // default: top\n  whiteList['chains'] = false; // default: none\n  whiteList['clear'] = true; // default: none\n  whiteList['clip'] = false; // default: auto\n  whiteList['clip-path'] = false; // default: none\n  whiteList['clip-rule'] = false; // default: nonzero\n  whiteList['color'] = true; // default: implementation dependent\n  whiteList['color-interpolation-filters'] = true; // default: auto\n  whiteList['column-count'] = false; // default: auto\n  whiteList['column-fill'] = false; // default: balance\n  whiteList['column-gap'] = false; // default: normal\n  whiteList['column-rule'] = false; // default: depending on individual properties\n  whiteList['column-rule-color'] = false; // default: current color\n  whiteList['column-rule-style'] = false; // default: medium\n  whiteList['column-rule-width'] = false; // default: medium\n  whiteList['column-span'] = false; // default: none\n  whiteList['column-width'] = false; // default: auto\n  whiteList['columns'] = false; // default: depending on individual properties\n  whiteList['contain'] = false; // default: none\n  whiteList['content'] = false; // default: normal\n  whiteList['counter-increment'] = false; // default: none\n  whiteList['counter-reset'] = false; // default: none\n  whiteList['counter-set'] = false; // default: none\n  whiteList['crop'] = false; // default: auto\n  whiteList['cue'] = false; // default: depending on individual properties\n  whiteList['cue-after'] = false; // default: none\n  whiteList['cue-before'] = false; // default: none\n  whiteList['cursor'] = false; // default: auto\n  whiteList['direction'] = false; // default: ltr\n  whiteList['display'] = true; // default: depending on individual properties\n  whiteList['display-inside'] = true; // default: auto\n  whiteList['display-list'] = true; // default: none\n  whiteList['display-outside'] = true; // default: inline-level\n  whiteList['dominant-baseline'] = false; // default: auto\n  whiteList['elevation'] = false; // default: level\n  whiteList['empty-cells'] = false; // default: show\n  whiteList['filter'] = false; // default: none\n  whiteList['flex'] = false; // default: depending on individual properties\n  whiteList['flex-basis'] = false; // default: auto\n  whiteList['flex-direction'] = false; // default: row\n  whiteList['flex-flow'] = false; // default: depending on individual properties\n  whiteList['flex-grow'] = false; // default: 0\n  whiteList['flex-shrink'] = false; // default: 1\n  whiteList['flex-wrap'] = false; // default: nowrap\n  whiteList['float'] = false; // default: none\n  whiteList['float-offset'] = false; // default: 0 0\n  whiteList['flood-color'] = false; // default: black\n  whiteList['flood-opacity'] = false; // default: 1\n  whiteList['flow-from'] = false; // default: none\n  whiteList['flow-into'] = false; // default: none\n  whiteList['font'] = true; // default: depending on individual properties\n  whiteList['font-family'] = true; // default: implementation dependent\n  whiteList['font-feature-settings'] = true; // default: normal\n  whiteList['font-kerning'] = true; // default: auto\n  whiteList['font-language-override'] = true; // default: normal\n  whiteList['font-size'] = true; // default: medium\n  whiteList['font-size-adjust'] = true; // default: none\n  whiteList['font-stretch'] = true; // default: normal\n  whiteList['font-style'] = true; // default: normal\n  whiteList['font-synthesis'] = true; // default: weight style\n  whiteList['font-variant'] = true; // default: normal\n  whiteList['font-variant-alternates'] = true; // default: normal\n  whiteList['font-variant-caps'] = true; // default: normal\n  whiteList['font-variant-east-asian'] = true; // default: normal\n  whiteList['font-variant-ligatures'] = true; // default: normal\n  whiteList['font-variant-numeric'] = true; // default: normal\n  whiteList['font-variant-position'] = true; // default: normal\n  whiteList['font-weight'] = true; // default: normal\n  whiteList['grid'] = false; // default: depending on individual properties\n  whiteList['grid-area'] = false; // default: depending on individual properties\n  whiteList['grid-auto-columns'] = false; // default: auto\n  whiteList['grid-auto-flow'] = false; // default: none\n  whiteList['grid-auto-rows'] = false; // default: auto\n  whiteList['grid-column'] = false; // default: depending on individual properties\n  whiteList['grid-column-end'] = false; // default: auto\n  whiteList['grid-column-start'] = false; // default: auto\n  whiteList['grid-row'] = false; // default: depending on individual properties\n  whiteList['grid-row-end'] = false; // default: auto\n  whiteList['grid-row-start'] = false; // default: auto\n  whiteList['grid-template'] = false; // default: depending on individual properties\n  whiteList['grid-template-areas'] = false; // default: none\n  whiteList['grid-template-columns'] = false; // default: none\n  whiteList['grid-template-rows'] = false; // default: none\n  whiteList['hanging-punctuation'] = false; // default: none\n  whiteList['height'] = true; // default: auto\n  whiteList['hyphens'] = false; // default: manual\n  whiteList['icon'] = false; // default: auto\n  whiteList['image-orientation'] = false; // default: auto\n  whiteList['image-resolution'] = false; // default: normal\n  whiteList['ime-mode'] = false; // default: auto\n  whiteList['initial-letters'] = false; // default: normal\n  whiteList['inline-box-align'] = false; // default: last\n  whiteList['justify-content'] = false; // default: auto\n  whiteList['justify-items'] = false; // default: auto\n  whiteList['justify-self'] = false; // default: auto\n  whiteList['left'] = false; // default: auto\n  whiteList['letter-spacing'] = true; // default: normal\n  whiteList['lighting-color'] = true; // default: white\n  whiteList['line-box-contain'] = false; // default: block inline replaced\n  whiteList['line-break'] = false; // default: auto\n  whiteList['line-grid'] = false; // default: match-parent\n  whiteList['line-height'] = false; // default: normal\n  whiteList['line-snap'] = false; // default: none\n  whiteList['line-stacking'] = false; // default: depending on individual properties\n  whiteList['line-stacking-ruby'] = false; // default: exclude-ruby\n  whiteList['line-stacking-shift'] = false; // default: consider-shifts\n  whiteList['line-stacking-strategy'] = false; // default: inline-line-height\n  whiteList['list-style'] = true; // default: depending on individual properties\n  whiteList['list-style-image'] = true; // default: none\n  whiteList['list-style-position'] = true; // default: outside\n  whiteList['list-style-type'] = true; // default: disc\n  whiteList['margin'] = true; // default: depending on individual properties\n  whiteList['margin-bottom'] = true; // default: 0\n  whiteList['margin-left'] = true; // default: 0\n  whiteList['margin-right'] = true; // default: 0\n  whiteList['margin-top'] = true; // default: 0\n  whiteList['marker-offset'] = false; // default: auto\n  whiteList['marker-side'] = false; // default: list-item\n  whiteList['marks'] = false; // default: none\n  whiteList['mask'] = false; // default: border-box\n  whiteList['mask-box'] = false; // default: see individual properties\n  whiteList['mask-box-outset'] = false; // default: 0\n  whiteList['mask-box-repeat'] = false; // default: stretch\n  whiteList['mask-box-slice'] = false; // default: 0 fill\n  whiteList['mask-box-source'] = false; // default: none\n  whiteList['mask-box-width'] = false; // default: auto\n  whiteList['mask-clip'] = false; // default: border-box\n  whiteList['mask-image'] = false; // default: none\n  whiteList['mask-origin'] = false; // default: border-box\n  whiteList['mask-position'] = false; // default: center\n  whiteList['mask-repeat'] = false; // default: no-repeat\n  whiteList['mask-size'] = false; // default: border-box\n  whiteList['mask-source-type'] = false; // default: auto\n  whiteList['mask-type'] = false; // default: luminance\n  whiteList['max-height'] = true; // default: none\n  whiteList['max-lines'] = false; // default: none\n  whiteList['max-width'] = true; // default: none\n  whiteList['min-height'] = true; // default: 0\n  whiteList['min-width'] = true; // default: 0\n  whiteList['move-to'] = false; // default: normal\n  whiteList['nav-down'] = false; // default: auto\n  whiteList['nav-index'] = false; // default: auto\n  whiteList['nav-left'] = false; // default: auto\n  whiteList['nav-right'] = false; // default: auto\n  whiteList['nav-up'] = false; // default: auto\n  whiteList['object-fit'] = false; // default: fill\n  whiteList['object-position'] = false; // default: 50% 50%\n  whiteList['opacity'] = false; // default: 1\n  whiteList['order'] = false; // default: 0\n  whiteList['orphans'] = false; // default: 2\n  whiteList['outline'] = false; // default: depending on individual properties\n  whiteList['outline-color'] = false; // default: invert\n  whiteList['outline-offset'] = false; // default: 0\n  whiteList['outline-style'] = false; // default: none\n  whiteList['outline-width'] = false; // default: medium\n  whiteList['overflow'] = false; // default: depending on individual properties\n  whiteList['overflow-wrap'] = false; // default: normal\n  whiteList['overflow-x'] = false; // default: visible\n  whiteList['overflow-y'] = false; // default: visible\n  whiteList['padding'] = true; // default: depending on individual properties\n  whiteList['padding-bottom'] = true; // default: 0\n  whiteList['padding-left'] = true; // default: 0\n  whiteList['padding-right'] = true; // default: 0\n  whiteList['padding-top'] = true; // default: 0\n  whiteList['page'] = false; // default: auto\n  whiteList['page-break-after'] = false; // default: auto\n  whiteList['page-break-before'] = false; // default: auto\n  whiteList['page-break-inside'] = false; // default: auto\n  whiteList['page-policy'] = false; // default: start\n  whiteList['pause'] = false; // default: implementation dependent\n  whiteList['pause-after'] = false; // default: implementation dependent\n  whiteList['pause-before'] = false; // default: implementation dependent\n  whiteList['perspective'] = false; // default: none\n  whiteList['perspective-origin'] = false; // default: 50% 50%\n  whiteList['pitch'] = false; // default: medium\n  whiteList['pitch-range'] = false; // default: 50\n  whiteList['play-during'] = false; // default: auto\n  whiteList['position'] = false; // default: static\n  whiteList['presentation-level'] = false; // default: 0\n  whiteList['quotes'] = false; // default: text\n  whiteList['region-fragment'] = false; // default: auto\n  whiteList['resize'] = false; // default: none\n  whiteList['rest'] = false; // default: depending on individual properties\n  whiteList['rest-after'] = false; // default: none\n  whiteList['rest-before'] = false; // default: none\n  whiteList['richness'] = false; // default: 50\n  whiteList['right'] = false; // default: auto\n  whiteList['rotation'] = false; // default: 0\n  whiteList['rotation-point'] = false; // default: 50% 50%\n  whiteList['ruby-align'] = false; // default: auto\n  whiteList['ruby-merge'] = false; // default: separate\n  whiteList['ruby-position'] = false; // default: before\n  whiteList['shape-image-threshold'] = false; // default: 0.0\n  whiteList['shape-outside'] = false; // default: none\n  whiteList['shape-margin'] = false; // default: 0\n  whiteList['size'] = false; // default: auto\n  whiteList['speak'] = false; // default: auto\n  whiteList['speak-as'] = false; // default: normal\n  whiteList['speak-header'] = false; // default: once\n  whiteList['speak-numeral'] = false; // default: continuous\n  whiteList['speak-punctuation'] = false; // default: none\n  whiteList['speech-rate'] = false; // default: medium\n  whiteList['stress'] = false; // default: 50\n  whiteList['string-set'] = false; // default: none\n  whiteList['tab-size'] = false; // default: 8\n  whiteList['table-layout'] = false; // default: auto\n  whiteList['text-align'] = true; // default: start\n  whiteList['text-align-last'] = true; // default: auto\n  whiteList['text-combine-upright'] = true; // default: none\n  whiteList['text-decoration'] = true; // default: none\n  whiteList['text-decoration-color'] = true; // default: currentColor\n  whiteList['text-decoration-line'] = true; // default: none\n  whiteList['text-decoration-skip'] = true; // default: objects\n  whiteList['text-decoration-style'] = true; // default: solid\n  whiteList['text-emphasis'] = true; // default: depending on individual properties\n  whiteList['text-emphasis-color'] = true; // default: currentColor\n  whiteList['text-emphasis-position'] = true; // default: over right\n  whiteList['text-emphasis-style'] = true; // default: none\n  whiteList['text-height'] = true; // default: auto\n  whiteList['text-indent'] = true; // default: 0\n  whiteList['text-justify'] = true; // default: auto\n  whiteList['text-orientation'] = true; // default: mixed\n  whiteList['text-overflow'] = true; // default: clip\n  whiteList['text-shadow'] = true; // default: none\n  whiteList['text-space-collapse'] = true; // default: collapse\n  whiteList['text-transform'] = true; // default: none\n  whiteList['text-underline-position'] = true; // default: auto\n  whiteList['text-wrap'] = true; // default: normal\n  whiteList['top'] = false; // default: auto\n  whiteList['transform'] = false; // default: none\n  whiteList['transform-origin'] = false; // default: 50% 50% 0\n  whiteList['transform-style'] = false; // default: flat\n  whiteList['transition'] = false; // default: depending on individual properties\n  whiteList['transition-delay'] = false; // default: 0s\n  whiteList['transition-duration'] = false; // default: 0s\n  whiteList['transition-property'] = false; // default: all\n  whiteList['transition-timing-function'] = false; // default: ease\n  whiteList['unicode-bidi'] = false; // default: normal\n  whiteList['vertical-align'] = false; // default: baseline\n  whiteList['visibility'] = false; // default: visible\n  whiteList['voice-balance'] = false; // default: center\n  whiteList['voice-duration'] = false; // default: auto\n  whiteList['voice-family'] = false; // default: implementation dependent\n  whiteList['voice-pitch'] = false; // default: medium\n  whiteList['voice-range'] = false; // default: medium\n  whiteList['voice-rate'] = false; // default: normal\n  whiteList['voice-stress'] = false; // default: normal\n  whiteList['voice-volume'] = false; // default: medium\n  whiteList['volume'] = false; // default: medium\n  whiteList['white-space'] = false; // default: normal\n  whiteList['widows'] = false; // default: 2\n  whiteList['width'] = true; // default: auto\n  whiteList['will-change'] = false; // default: auto\n  whiteList['word-break'] = true; // default: normal\n  whiteList['word-spacing'] = true; // default: normal\n  whiteList['word-wrap'] = true; // default: normal\n  whiteList['wrap-flow'] = false; // default: auto\n  whiteList['wrap-through'] = false; // default: wrap\n  whiteList['writing-mode'] = false; // default: horizontal-tb\n  whiteList['z-index'] = false; // default: auto\n\n  return whiteList;\n}\n\n\n/**\n * 匹配到白名单上的一个属性时\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {String}\n */\nfunction onAttr (name, value, options) {\n  // do nothing\n}\n\n/**\n * 匹配到不在白名单上的一个属性时\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreAttr (name, value, options) {\n  // do nothing\n}\n\nvar REGEXP_URL_JAVASCRIPT = /javascript\\s*\\:/img;\n\n/**\n * 过滤属性值\n *\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction safeAttrValue(name, value) {\n  if (REGEXP_URL_JAVASCRIPT.test(value)) return '';\n  return value;\n}\n\n\nexports.whiteList = getDefaultWhiteList();\nexports.getDefaultWhiteList = getDefaultWhiteList;\nexports.onAttr = onAttr;\nexports.onIgnoreAttr = onIgnoreAttr;\nexports.safeAttrValue = safeAttrValue;\n", "module.exports = {\n  indexOf: function (arr, item) {\n    var i, j;\n    if (Array.prototype.indexOf) {\n      return arr.indexOf(item);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      if (arr[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  },\n  forEach: function (arr, fn, scope) {\n    var i, j;\n    if (Array.prototype.forEach) {\n      return arr.forEach(fn, scope);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      fn.call(scope, arr[i], i, arr);\n    }\n  },\n  trim: function (str) {\n    if (String.prototype.trim) {\n      return str.trim();\n    }\n    return str.replace(/(^\\s*)|(\\s*$)/g, '');\n  },\n  trimRight: function (str) {\n    if (String.prototype.trimRight) {\n      return str.trimRight();\n    }\n    return str.replace(/(\\s*$)/g, '');\n  }\n};\n", "/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar _ = require('./util');\n\n\n/**\n * 解析style\n *\n * @param {String} css\n * @param {Function} onAttr 处理属性的函数\n *   参数格式： function (sourcePosition, position, name, value, source)\n * @return {String}\n */\nfunction parseStyle (css, onAttr) {\n  css = _.trimRight(css);\n  if (css[css.length - 1] !== ';') css += ';';\n  var cssLength = css.length;\n  var isParenthesisOpen = false;\n  var lastPos = 0;\n  var i = 0;\n  var retCSS = '';\n\n  function addNewAttr () {\n    // 如果没有正常的闭合圆括号，则直接忽略当前属性\n    if (!isParenthesisOpen) {\n      var source = _.trim(css.slice(lastPos, i));\n      var j = source.indexOf(':');\n      if (j !== -1) {\n        var name = _.trim(source.slice(0, j));\n        var value = _.trim(source.slice(j + 1));\n        // 必须有属性名称\n        if (name) {\n          var ret = onAttr(lastPos, retCSS.length, name, value, source);\n          if (ret) retCSS += ret + '; ';\n        }\n      }\n    }\n    lastPos = i + 1;\n  }\n\n  for (; i < cssLength; i++) {\n    var c = css[i];\n    if (c === '/' && css[i + 1] === '*') {\n      // 备注开始\n      var j = css.indexOf('*/', i + 2);\n      // 如果没有正常的备注结束，则后面的部分全部跳过\n      if (j === -1) break;\n      // 直接将当前位置调到备注结尾，并且初始化状态\n      i = j + 1;\n      lastPos = i + 1;\n      isParenthesisOpen = false;\n    } else if (c === '(') {\n      isParenthesisOpen = true;\n    } else if (c === ')') {\n      isParenthesisOpen = false;\n    } else if (c === ';') {\n      if (isParenthesisOpen) {\n        // 在圆括号里面，忽略\n      } else {\n        addNewAttr();\n      }\n    } else if (c === '\\n') {\n      addNewAttr();\n    }\n  }\n\n  return _.trim(retCSS);\n}\n\nmodule.exports = parseStyle;\n", "/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar DEFAULT = require('./default');\nvar parseStyle = require('./parser');\nvar _ = require('./util');\n\n\n/**\n * 返回值是否为空\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull (obj) {\n  return (obj === undefined || obj === null);\n}\n\n/**\n * 浅拷贝对象\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject (obj) {\n  var ret = {};\n  for (var i in obj) {\n    ret[i] = obj[i];\n  }\n  return ret;\n}\n\n/**\n * 创建CSS过滤器\n *\n * @param {Object} options\n *   - {Object} whiteList\n *   - {Function} onAttr\n *   - {Function} onIgnoreAttr\n *   - {Function} safeAttrValue\n */\nfunction FilterCSS (options) {\n  options = shallowCopyObject(options || {});\n  options.whiteList = options.whiteList || DEFAULT.whiteList;\n  options.onAttr = options.onAttr || DEFAULT.onAttr;\n  options.onIgnoreAttr = options.onIgnoreAttr || DEFAULT.onIgnoreAttr;\n  options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n  this.options = options;\n}\n\nFilterCSS.prototype.process = function (css) {\n  // 兼容各种奇葩输入\n  css = css || '';\n  css = css.toString();\n  if (!css) return '';\n\n  var me = this;\n  var options = me.options;\n  var whiteList = options.whiteList;\n  var onAttr = options.onAttr;\n  var onIgnoreAttr = options.onIgnoreAttr;\n  var safeAttrValue = options.safeAttrValue;\n\n  var retCSS = parseStyle(css, function (sourcePosition, position, name, value, source) {\n\n    var check = whiteList[name];\n    var isWhite = false;\n    if (check === true) isWhite = check;\n    else if (typeof check === 'function') isWhite = check(value);\n    else if (check instanceof RegExp) isWhite = check.test(value);\n    if (isWhite !== true) isWhite = false;\n\n    // 如果过滤后 value 为空则直接忽略\n    value = safeAttrValue(name, value);\n    if (!value) return;\n\n    var opts = {\n      position: position,\n      sourcePosition: sourcePosition,\n      source: source,\n      isWhite: isWhite\n    };\n\n    if (isWhite) {\n\n      var ret = onAttr(name, value, opts);\n      if (isNull(ret)) {\n        return name + ':' + value;\n      } else {\n        return ret;\n      }\n\n    } else {\n\n      var ret = onIgnoreAttr(name, value, opts);\n      if (!isNull(ret)) {\n        return ret;\n      }\n\n    }\n  });\n\n  return retCSS;\n};\n\n\nmodule.exports = FilterCSS;\n", "/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar DEFAULT = require('./default');\nvar FilterCSS = require('./css');\n\n\n/**\n * XSS过滤\n *\n * @param {String} css 要过滤的CSS代码\n * @param {Object} options 选项：whiteList, onAttr, onIgnoreAttr\n * @return {String}\n */\nfunction filterCSS (html, options) {\n  var xss = new FilterCSS(options);\n  return xss.process(html);\n}\n\n\n// 输出\nexports = module.exports = filterCSS;\nexports.FilterCSS = FilterCSS;\nfor (var i in DEFAULT) exports[i] = DEFAULT[i];\n\n// 在浏览器端使用\nif (typeof window !== 'undefined') {\n  window.filterCSS = module.exports;\n}\n", "module.exports = {\n  indexOf: function (arr, item) {\n    var i, j;\n    if (Array.prototype.indexOf) {\n      return arr.indexOf(item);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      if (arr[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  },\n  forEach: function (arr, fn, scope) {\n    var i, j;\n    if (Array.prototype.forEach) {\n      return arr.forEach(fn, scope);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      fn.call(scope, arr[i], i, arr);\n    }\n  },\n  trim: function (str) {\n    if (String.prototype.trim) {\n      return str.trim();\n    }\n    return str.replace(/(^\\s*)|(\\s*$)/g, \"\");\n  },\n  spaceIndex: function (str) {\n    var reg = /\\s|\\n|\\t/;\n    var match = reg.exec(str);\n    return match ? match.index : -1;\n  },\n};\n", "/**\n * default settings\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar FilterCSS = require(\"cssfilter\").FilterCSS;\nvar getDefaultCSSWhiteList = require(\"cssfilter\").getDefaultWhiteList;\nvar _ = require(\"./util\");\n\nfunction getDefaultWhiteList() {\n  return {\n    a: [\"target\", \"href\", \"title\"],\n    abbr: [\"title\"],\n    address: [],\n    area: [\"shape\", \"coords\", \"href\", \"alt\"],\n    article: [],\n    aside: [],\n    audio: [\n      \"autoplay\",\n      \"controls\",\n      \"crossorigin\",\n      \"loop\",\n      \"muted\",\n      \"preload\",\n      \"src\",\n    ],\n    b: [],\n    bdi: [\"dir\"],\n    bdo: [\"dir\"],\n    big: [],\n    blockquote: [\"cite\"],\n    br: [],\n    caption: [],\n    center: [],\n    cite: [],\n    code: [],\n    col: [\"align\", \"valign\", \"span\", \"width\"],\n    colgroup: [\"align\", \"valign\", \"span\", \"width\"],\n    dd: [],\n    del: [\"datetime\"],\n    details: [\"open\"],\n    div: [],\n    dl: [],\n    dt: [],\n    em: [],\n    figcaption: [],\n    figure: [],\n    font: [\"color\", \"size\", \"face\"],\n    footer: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    header: [],\n    hr: [],\n    i: [],\n    img: [\"src\", \"alt\", \"title\", \"width\", \"height\", \"loading\"],\n    ins: [\"datetime\"],\n    kbd: [],\n    li: [],\n    mark: [],\n    nav: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    section: [],\n    small: [],\n    span: [],\n    sub: [],\n    summary: [],\n    sup: [],\n    strong: [],\n    strike: [],\n    table: [\"width\", \"border\", \"align\", \"valign\"],\n    tbody: [\"align\", \"valign\"],\n    td: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n    tfoot: [\"align\", \"valign\"],\n    th: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n    thead: [\"align\", \"valign\"],\n    tr: [\"rowspan\", \"align\", \"valign\"],\n    tt: [],\n    u: [],\n    ul: [],\n    video: [\n      \"autoplay\",\n      \"controls\",\n      \"crossorigin\",\n      \"loop\",\n      \"muted\",\n      \"playsinline\",\n      \"poster\",\n      \"preload\",\n      \"src\",\n      \"height\",\n      \"width\",\n    ],\n  };\n}\n\nvar defaultCSSFilter = new FilterCSS();\n\n/**\n * default onTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onTag(tag, html, options) {\n  // do nothing\n}\n\n/**\n * default onIgnoreTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreTag(tag, html, options) {\n  // do nothing\n}\n\n/**\n * default onTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onTagAttr(tag, name, value) {\n  // do nothing\n}\n\n/**\n * default onIgnoreTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onIgnoreTagAttr(tag, name, value) {\n  // do nothing\n}\n\n/**\n * default escapeHtml function\n *\n * @param {String} html\n */\nfunction escapeHtml(html) {\n  return html.replace(REGEXP_LT, \"&lt;\").replace(REGEXP_GT, \"&gt;\");\n}\n\n/**\n * default safeAttrValue function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @param {Object} cssFilter\n * @return {String}\n */\nfunction safeAttrValue(tag, name, value, cssFilter) {\n  // unescape attribute value firstly\n  value = friendlyAttrValue(value);\n\n  if (name === \"href\" || name === \"src\") {\n    // filter `href` and `src` attribute\n    // only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#`\n    value = _.trim(value);\n    if (value === \"#\") return \"#\";\n    if (\n      !(\n        value.substr(0, 7) === \"http://\" ||\n        value.substr(0, 8) === \"https://\" ||\n        value.substr(0, 7) === \"mailto:\" ||\n        value.substr(0, 4) === \"tel:\" ||\n        value.substr(0, 11) === \"data:image/\" ||\n        value.substr(0, 6) === \"ftp://\" ||\n        value.substr(0, 2) === \"./\" ||\n        value.substr(0, 3) === \"../\" ||\n        value[0] === \"#\" ||\n        value[0] === \"/\"\n      )\n    ) {\n      return \"\";\n    }\n  } else if (name === \"background\") {\n    // filter `background` attribute (maybe no use)\n    // `javascript:`\n    REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n    if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n      return \"\";\n    }\n  } else if (name === \"style\") {\n    // `expression()`\n    REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0;\n    if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) {\n      return \"\";\n    }\n    // `url()`\n    REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0;\n    if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) {\n      REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n      if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n        return \"\";\n      }\n    }\n    if (cssFilter !== false) {\n      cssFilter = cssFilter || defaultCSSFilter;\n      value = cssFilter.process(value);\n    }\n  }\n\n  // escape `<>\"` before returns\n  value = escapeAttrValue(value);\n  return value;\n}\n\n// RegExp list\nvar REGEXP_LT = /</g;\nvar REGEXP_GT = />/g;\nvar REGEXP_QUOTE = /\"/g;\nvar REGEXP_QUOTE_2 = /&quot;/g;\nvar REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/gim;\nvar REGEXP_ATTR_VALUE_COLON = /&colon;?/gim;\nvar REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/gim;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\\/\\*|\\*\\//gm;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_4 =\n  /((j\\s*a\\s*v\\s*a|v\\s*b|l\\s*i\\s*v\\s*e)\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\s*|m\\s*o\\s*c\\s*h\\s*a):/gi;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:/gi;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:\\s*image\\//gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_7 =\n  /e\\s*x\\s*p\\s*r\\s*e\\s*s\\s*s\\s*i\\s*o\\s*n\\s*\\(.*/gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\\s*r\\s*l\\s*\\(.*/gi;\n\n/**\n * escape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction escapeQuote(str) {\n  return str.replace(REGEXP_QUOTE, \"&quot;\");\n}\n\n/**\n * unescape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction unescapeQuote(str) {\n  return str.replace(REGEXP_QUOTE_2, '\"');\n}\n\n/**\n * escape html entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeHtmlEntities(str) {\n  return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode(str, code) {\n    return code[0] === \"x\" || code[0] === \"X\"\n      ? String.fromCharCode(parseInt(code.substr(1), 16))\n      : String.fromCharCode(parseInt(code, 10));\n  });\n}\n\n/**\n * escape html5 new danger entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeDangerHtml5Entities(str) {\n  return str\n    .replace(REGEXP_ATTR_VALUE_COLON, \":\")\n    .replace(REGEXP_ATTR_VALUE_NEWLINE, \" \");\n}\n\n/**\n * clear nonprintable characters\n *\n * @param {String} str\n * @return {String}\n */\nfunction clearNonPrintableCharacter(str) {\n  var str2 = \"\";\n  for (var i = 0, len = str.length; i < len; i++) {\n    str2 += str.charCodeAt(i) < 32 ? \" \" : str.charAt(i);\n  }\n  return _.trim(str2);\n}\n\n/**\n * get friendly attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction friendlyAttrValue(str) {\n  str = unescapeQuote(str);\n  str = escapeHtmlEntities(str);\n  str = escapeDangerHtml5Entities(str);\n  str = clearNonPrintableCharacter(str);\n  return str;\n}\n\n/**\n * unescape attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeAttrValue(str) {\n  str = escapeQuote(str);\n  str = escapeHtml(str);\n  return str;\n}\n\n/**\n * `onIgnoreTag` function for removing all the tags that are not in whitelist\n */\nfunction onIgnoreTagStripAll() {\n  return \"\";\n}\n\n/**\n * remove tag body\n * specify a `tags` list, if the tag is not in the `tags` list then process by the specify function (optional)\n *\n * @param {array} tags\n * @param {function} next\n */\nfunction StripTagBody(tags, next) {\n  if (typeof next !== \"function\") {\n    next = function () {};\n  }\n\n  var isRemoveAllTag = !Array.isArray(tags);\n  function isRemoveTag(tag) {\n    if (isRemoveAllTag) return true;\n    return _.indexOf(tags, tag) !== -1;\n  }\n\n  var removeList = [];\n  var posStart = false;\n\n  return {\n    onIgnoreTag: function (tag, html, options) {\n      if (isRemoveTag(tag)) {\n        if (options.isClosing) {\n          var ret = \"[/removed]\";\n          var end = options.position + ret.length;\n          removeList.push([\n            posStart !== false ? posStart : options.position,\n            end,\n          ]);\n          posStart = false;\n          return ret;\n        } else {\n          if (!posStart) {\n            posStart = options.position;\n          }\n          return \"[removed]\";\n        }\n      } else {\n        return next(tag, html, options);\n      }\n    },\n    remove: function (html) {\n      var rethtml = \"\";\n      var lastPos = 0;\n      _.forEach(removeList, function (pos) {\n        rethtml += html.slice(lastPos, pos[0]);\n        lastPos = pos[1];\n      });\n      rethtml += html.slice(lastPos);\n      return rethtml;\n    },\n  };\n}\n\n/**\n * remove html comments\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripCommentTag(html) {\n  var retHtml = \"\";\n  var lastPos = 0;\n  while (lastPos < html.length) {\n    var i = html.indexOf(\"<!--\", lastPos);\n    if (i === -1) {\n      retHtml += html.slice(lastPos);\n      break;\n    }\n    retHtml += html.slice(lastPos, i);\n    var j = html.indexOf(\"-->\", i);\n    if (j === -1) {\n      break;\n    }\n    lastPos = j + 3;\n  }\n  return retHtml;\n}\n\n/**\n * remove invisible characters\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripBlankChar(html) {\n  var chars = html.split(\"\");\n  chars = chars.filter(function (char) {\n    var c = char.charCodeAt(0);\n    if (c === 127) return false;\n    if (c <= 31) {\n      if (c === 10 || c === 13) return true;\n      return false;\n    }\n    return true;\n  });\n  return chars.join(\"\");\n}\n\nexports.whiteList = getDefaultWhiteList();\nexports.getDefaultWhiteList = getDefaultWhiteList;\nexports.onTag = onTag;\nexports.onIgnoreTag = onIgnoreTag;\nexports.onTagAttr = onTagAttr;\nexports.onIgnoreTagAttr = onIgnoreTagAttr;\nexports.safeAttrValue = safeAttrValue;\nexports.escapeHtml = escapeHtml;\nexports.escapeQuote = escapeQuote;\nexports.unescapeQuote = unescapeQuote;\nexports.escapeHtmlEntities = escapeHtmlEntities;\nexports.escapeDangerHtml5Entities = escapeDangerHtml5Entities;\nexports.clearNonPrintableCharacter = clearNonPrintableCharacter;\nexports.friendlyAttrValue = friendlyAttrValue;\nexports.escapeAttrValue = escapeAttrValue;\nexports.onIgnoreTagStripAll = onIgnoreTagStripAll;\nexports.StripTagBody = StripTagBody;\nexports.stripCommentTag = stripCommentTag;\nexports.stripBlankChar = stripBlankChar;\nexports.attributeWrapSign = '\"';\nexports.cssFilter = defaultCSSFilter;\nexports.getDefaultCSSWhiteList = getDefaultCSSWhiteList;\n", "/**\n * Simple HTML Parser\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar _ = require(\"./util\");\n\n/**\n * get tag name\n *\n * @param {String} html e.g. '<a hef=\"#\">'\n * @return {String}\n */\nfunction getTagName(html) {\n  var i = _.spaceIndex(html);\n  var tagName;\n  if (i === -1) {\n    tagName = html.slice(1, -1);\n  } else {\n    tagName = html.slice(1, i + 1);\n  }\n  tagName = _.trim(tagName).toLowerCase();\n  if (tagName.slice(0, 1) === \"/\") tagName = tagName.slice(1);\n  if (tagName.slice(-1) === \"/\") tagName = tagName.slice(0, -1);\n  return tagName;\n}\n\n/**\n * is close tag?\n *\n * @param {String} html 如：'<a hef=\"#\">'\n * @return {Boolean}\n */\nfunction isClosing(html) {\n  return html.slice(0, 2) === \"</\";\n}\n\n/**\n * parse input html and returns processed html\n *\n * @param {String} html\n * @param {Function} onTag e.g. function (sourcePosition, position, tag, html, isClosing)\n * @param {Function} escapeHtml\n * @return {String}\n */\nfunction parseTag(html, onTag, escapeHtml) {\n  \"use strict\";\n\n  var rethtml = \"\";\n  var lastPos = 0;\n  var tagStart = false;\n  var quoteStart = false;\n  var currentPos = 0;\n  var len = html.length;\n  var currentTagName = \"\";\n  var currentHtml = \"\";\n\n  chariterator: for (currentPos = 0; currentPos < len; currentPos++) {\n    var c = html.charAt(currentPos);\n    if (tagStart === false) {\n      if (c === \"<\") {\n        tagStart = currentPos;\n        continue;\n      }\n    } else {\n      if (quoteStart === false) {\n        if (c === \"<\") {\n          rethtml += escapeHtml(html.slice(lastPos, currentPos));\n          tagStart = currentPos;\n          lastPos = currentPos;\n          continue;\n        }\n        if (c === \">\" || currentPos === len - 1) {\n          rethtml += escapeHtml(html.slice(lastPos, tagStart));\n          currentHtml = html.slice(tagStart, currentPos + 1);\n          currentTagName = getTagName(currentHtml);\n          rethtml += onTag(\n            tagStart,\n            rethtml.length,\n            currentTagName,\n            currentHtml,\n            isClosing(currentHtml)\n          );\n          lastPos = currentPos + 1;\n          tagStart = false;\n          continue;\n        }\n        if (c === '\"' || c === \"'\") {\n          var i = 1;\n          var ic = html.charAt(currentPos - i);\n\n          while (ic.trim() === \"\" || ic === \"=\") {\n            if (ic === \"=\") {\n              quoteStart = c;\n              continue chariterator;\n            }\n            ic = html.charAt(currentPos - ++i);\n          }\n        }\n      } else {\n        if (c === quoteStart) {\n          quoteStart = false;\n          continue;\n        }\n      }\n    }\n  }\n  if (lastPos < len) {\n    rethtml += escapeHtml(html.substr(lastPos));\n  }\n\n  return rethtml;\n}\n\nvar REGEXP_ILLEGAL_ATTR_NAME = /[^a-zA-Z0-9\\\\_:.-]/gim;\n\n/**\n * parse input attributes and returns processed attributes\n *\n * @param {String} html e.g. `href=\"#\" target=\"_blank\"`\n * @param {Function} onAttr e.g. `function (name, value)`\n * @return {String}\n */\nfunction parseAttr(html, onAttr) {\n  \"use strict\";\n\n  var lastPos = 0;\n  var lastMarkPos = 0;\n  var retAttrs = [];\n  var tmpName = false;\n  var len = html.length;\n\n  function addAttr(name, value) {\n    name = _.trim(name);\n    name = name.replace(REGEXP_ILLEGAL_ATTR_NAME, \"\").toLowerCase();\n    if (name.length < 1) return;\n    var ret = onAttr(name, value || \"\");\n    if (ret) retAttrs.push(ret);\n  }\n\n  // 逐个分析字符\n  for (var i = 0; i < len; i++) {\n    var c = html.charAt(i);\n    var v, j;\n    if (tmpName === false && c === \"=\") {\n      tmpName = html.slice(lastPos, i);\n      lastPos = i + 1;\n      lastMarkPos = html.charAt(lastPos) === '\"' || html.charAt(lastPos) === \"'\" ? lastPos : findNextQuotationMark(html, i + 1);\n      continue;\n    }\n    if (tmpName !== false) {\n      if (\n        i === lastMarkPos\n      ) {\n        j = html.indexOf(c, i + 1);\n        if (j === -1) {\n          break;\n        } else {\n          v = _.trim(html.slice(lastMarkPos + 1, j));\n          addAttr(tmpName, v);\n          tmpName = false;\n          i = j;\n          lastPos = i + 1;\n          continue;\n        }\n      }\n    }\n    if (/\\s|\\n|\\t/.test(c)) {\n      html = html.replace(/\\s|\\n|\\t/g, \" \");\n      if (tmpName === false) {\n        j = findNextEqual(html, i);\n        if (j === -1) {\n          v = _.trim(html.slice(lastPos, i));\n          addAttr(v);\n          tmpName = false;\n          lastPos = i + 1;\n          continue;\n        } else {\n          i = j - 1;\n          continue;\n        }\n      } else {\n        j = findBeforeEqual(html, i - 1);\n        if (j === -1) {\n          v = _.trim(html.slice(lastPos, i));\n          v = stripQuoteWrap(v);\n          addAttr(tmpName, v);\n          tmpName = false;\n          lastPos = i + 1;\n          continue;\n        } else {\n          continue;\n        }\n      }\n    }\n  }\n\n  if (lastPos < html.length) {\n    if (tmpName === false) {\n      addAttr(html.slice(lastPos));\n    } else {\n      addAttr(tmpName, stripQuoteWrap(_.trim(html.slice(lastPos))));\n    }\n  }\n\n  return _.trim(retAttrs.join(\" \"));\n}\n\nfunction findNextEqual(str, i) {\n  for (; i < str.length; i++) {\n    var c = str[i];\n    if (c === \" \") continue;\n    if (c === \"=\") return i;\n    return -1;\n  }\n}\n\nfunction findNextQuotationMark(str, i) {\n  for (; i < str.length; i++) {\n    var c = str[i];\n    if (c === \" \") continue;\n    if (c === \"'\" || c === '\"') return i;\n    return -1;\n  }\n}\n\nfunction findBeforeEqual(str, i) {\n  for (; i > 0; i--) {\n    var c = str[i];\n    if (c === \" \") continue;\n    if (c === \"=\") return i;\n    return -1;\n  }\n}\n\nfunction isQuoteWrapString(text) {\n  if (\n    (text[0] === '\"' && text[text.length - 1] === '\"') ||\n    (text[0] === \"'\" && text[text.length - 1] === \"'\")\n  ) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction stripQuoteWrap(text) {\n  if (isQuoteWrapString(text)) {\n    return text.substr(1, text.length - 2);\n  } else {\n    return text;\n  }\n}\n\nexports.parseTag = parseTag;\nexports.parseAttr = parseAttr;\n", "/**\n * filter xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar FilterCSS = require(\"cssfilter\").FilterCSS;\nvar DEFAULT = require(\"./default\");\nvar parser = require(\"./parser\");\nvar parseTag = parser.parseTag;\nvar parseAttr = parser.parseAttr;\nvar _ = require(\"./util\");\n\n/**\n * returns `true` if the input value is `undefined` or `null`\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull(obj) {\n  return obj === undefined || obj === null;\n}\n\n/**\n * get attributes for a tag\n *\n * @param {String} html\n * @return {Object}\n *   - {String} html\n *   - {Boolean} closing\n */\nfunction getAttrs(html) {\n  var i = _.spaceIndex(html);\n  if (i === -1) {\n    return {\n      html: \"\",\n      closing: html[html.length - 2] === \"/\",\n    };\n  }\n  html = _.trim(html.slice(i + 1, -1));\n  var isClosing = html[html.length - 1] === \"/\";\n  if (isClosing) html = _.trim(html.slice(0, -1));\n  return {\n    html: html,\n    closing: isClosing,\n  };\n}\n\n/**\n * shallow copy\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject(obj) {\n  var ret = {};\n  for (var i in obj) {\n    ret[i] = obj[i];\n  }\n  return ret;\n}\n\nfunction keysToLowerCase(obj) {\n  var ret = {};\n  for (var i in obj) {\n    if (Array.isArray(obj[i])) {\n      ret[i.toLowerCase()] = obj[i].map(function (item) {\n        return item.toLowerCase();\n      });\n    } else {\n      ret[i.toLowerCase()] = obj[i];\n    }\n  }\n  return ret;\n}\n\n/**\n * FilterXSS class\n *\n * @param {Object} options\n *        whiteList (or allowList), onTag, onTagAttr, onIgnoreTag,\n *        onIgnoreTagAttr, safeAttrValue, escapeHtml\n *        stripIgnoreTagBody, allowCommentTag, stripBlankChar\n *        css{whiteList, onAttr, onIgnoreAttr} `css=false` means don't use `cssfilter`\n */\nfunction FilterXSS(options) {\n  options = shallowCopyObject(options || {});\n\n  if (options.stripIgnoreTag) {\n    if (options.onIgnoreTag) {\n      console.error(\n        'Notes: cannot use these two options \"stripIgnoreTag\" and \"onIgnoreTag\" at the same time'\n      );\n    }\n    options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll;\n  }\n  if (options.whiteList || options.allowList) {\n    options.whiteList = keysToLowerCase(options.whiteList || options.allowList);\n  } else {\n    options.whiteList = DEFAULT.whiteList;\n  }\n\n  this.attributeWrapSign = options.singleQuotedAttributeValue === true ? \"'\" : DEFAULT.attributeWrapSign;\n\n  options.onTag = options.onTag || DEFAULT.onTag;\n  options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr;\n  options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag;\n  options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr;\n  options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n  options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml;\n  this.options = options;\n\n  if (options.css === false) {\n    this.cssFilter = false;\n  } else {\n    options.css = options.css || {};\n    this.cssFilter = new FilterCSS(options.css);\n  }\n}\n\n/**\n * start process and returns result\n *\n * @param {String} html\n * @return {String}\n */\nFilterXSS.prototype.process = function (html) {\n  // compatible with the input\n  html = html || \"\";\n  html = html.toString();\n  if (!html) return \"\";\n\n  var me = this;\n  var options = me.options;\n  var whiteList = options.whiteList;\n  var onTag = options.onTag;\n  var onIgnoreTag = options.onIgnoreTag;\n  var onTagAttr = options.onTagAttr;\n  var onIgnoreTagAttr = options.onIgnoreTagAttr;\n  var safeAttrValue = options.safeAttrValue;\n  var escapeHtml = options.escapeHtml;\n  var attributeWrapSign = me.attributeWrapSign;\n  var cssFilter = me.cssFilter;\n\n  // remove invisible characters\n  if (options.stripBlankChar) {\n    html = DEFAULT.stripBlankChar(html);\n  }\n\n  // remove html comments\n  if (!options.allowCommentTag) {\n    html = DEFAULT.stripCommentTag(html);\n  }\n\n  // if enable stripIgnoreTagBody\n  var stripIgnoreTagBody = false;\n  if (options.stripIgnoreTagBody) {\n    stripIgnoreTagBody = DEFAULT.StripTagBody(\n      options.stripIgnoreTagBody,\n      onIgnoreTag\n    );\n    onIgnoreTag = stripIgnoreTagBody.onIgnoreTag;\n  }\n\n  var retHtml = parseTag(\n    html,\n    function (sourcePosition, position, tag, html, isClosing) {\n      var info = {\n        sourcePosition: sourcePosition,\n        position: position,\n        isClosing: isClosing,\n        isWhite: Object.prototype.hasOwnProperty.call(whiteList, tag),\n      };\n\n      // call `onTag()`\n      var ret = onTag(tag, html, info);\n      if (!isNull(ret)) return ret;\n\n      if (info.isWhite) {\n        if (info.isClosing) {\n          return \"</\" + tag + \">\";\n        }\n\n        var attrs = getAttrs(html);\n        var whiteAttrList = whiteList[tag];\n        var attrsHtml = parseAttr(attrs.html, function (name, value) {\n          // call `onTagAttr()`\n          var isWhiteAttr = _.indexOf(whiteAttrList, name) !== -1;\n          var ret = onTagAttr(tag, name, value, isWhiteAttr);\n          if (!isNull(ret)) return ret;\n\n          if (isWhiteAttr) {\n            // call `safeAttrValue()`\n            value = safeAttrValue(tag, name, value, cssFilter);\n            if (value) {\n              return name + '=' + attributeWrapSign + value + attributeWrapSign;\n            } else {\n              return name;\n            }\n          } else {\n            // call `onIgnoreTagAttr()`\n            ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr);\n            if (!isNull(ret)) return ret;\n            return;\n          }\n        });\n\n        // build new tag html\n        html = \"<\" + tag;\n        if (attrsHtml) html += \" \" + attrsHtml;\n        if (attrs.closing) html += \" /\";\n        html += \">\";\n        return html;\n      } else {\n        // call `onIgnoreTag()`\n        ret = onIgnoreTag(tag, html, info);\n        if (!isNull(ret)) return ret;\n        return escapeHtml(html);\n      }\n    },\n    escapeHtml\n  );\n\n  // if enable stripIgnoreTagBody\n  if (stripIgnoreTagBody) {\n    retHtml = stripIgnoreTagBody.remove(retHtml);\n  }\n\n  return retHtml;\n};\n\nmodule.exports = FilterXSS;\n", "/**\n * xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar DEFAULT = require(\"./default\");\nvar parser = require(\"./parser\");\nvar FilterXSS = require(\"./xss\");\n\n/**\n * filter xss function\n *\n * @param {String} html\n * @param {Object} options { whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml }\n * @return {String}\n */\nfunction filterXSS(html, options) {\n  var xss = new FilterXSS(options);\n  return xss.process(html);\n}\n\nexports = module.exports = filterXSS;\nexports.filterXSS = filterXSS;\nexports.FilterXSS = FilterXSS;\n\n(function () {\n  for (var i in DEFAULT) {\n    exports[i] = DEFAULT[i];\n  }\n  for (var j in parser) {\n    exports[j] = parser[j];\n  }\n})();\n\n// using `xss` on the browser, output `filterXSS` to the globals\nif (typeof window !== \"undefined\") {\n  window.filterXSS = module.exports;\n}\n\n// using `xss` on the WebWorker, output `filterXSS` to the globals\nfunction isWorkerEnv() {\n  return (\n    typeof self !== \"undefined\" &&\n    typeof DedicatedWorkerGlobalScope !== \"undefined\" &&\n    self instanceof DedicatedWorkerGlobalScope\n  );\n}\nif (isWorkerEnv()) {\n  self.filterXSS = module.exports;\n}\n", "// utility functions\n\nexport * from \"vis-util/esnext\";\nimport * as util from \"vis-util/esnext\";\nimport { getType, isNumber, isString } from \"vis-util/esnext\";\nimport { DataSet, createNewDataPipeFrom } from \"vis-data/esnext\";\nimport { isDataViewLike as isDataViewLikeUpstream } from \"vis-data/esnext\";\n\nimport moment from \"moment\";\nimport xssFilter from \"xss\";\n\nexport { v4 as randomUUID } from \"uuid\";\n/**\n * Test if an object implements the DataView interface from vis-data.\n * Uses the idProp property instead of expecting a hardcoded id field \"id\".\n * @param {Object} obj The object to test.\n * @returns {boolean} True if the object implements vis-data DataView interface otherwise false.\n */\nexport function isDataViewLike(obj) {\n  if (!obj) {\n    return false;\n  }\n  let idProp = obj.idProp ?? obj._idProp;\n  if (!idProp) {\n    return false;\n  }\n  return isDataViewLikeUpstream(idProp, obj);\n}\n\n// parse ASP.Net Date pattern,\n// for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/'\n// code from http://momentjs.com/\nconst ASPDateRegex = /^\\/?Date\\((-?\\d+)/i;\nconst NumericRegex = /^\\d+$/;\n/**\n * Convert an object into another type\n *\n * @param {Object} object - Value of unknown type.\n * @param {string} type - Name of the desired type.\n *\n * @returns {Object} Object in the desired type.\n * @throws Error\n */\nexport function convert(object, type) {\n  let match;\n\n  if (object === undefined) {\n    return undefined;\n  }\n  if (object === null) {\n    return null;\n  }\n\n  if (!type) {\n    return object;\n  }\n  if (!(typeof type === \"string\") && !(type instanceof String)) {\n    throw new Error(\"Type must be a string\");\n  }\n\n  //noinspection FallthroughInSwitchStatementJS\n  switch (type) {\n    case \"boolean\":\n    case \"Boolean\":\n      return Boolean(object);\n\n    case \"number\":\n    case \"Number\":\n      if (isString(object) && !isNaN(Date.parse(object))) {\n        return moment(object).valueOf();\n      } else {\n        // @TODO: I don't think that Number and String constructors are a good idea.\n        // This could also fail if the object doesn't have valueOf method or if it's redefined.\n        // For example: Object.create(null) or { valueOf: 7 }.\n        return Number(object.valueOf());\n      }\n    case \"string\":\n    case \"String\":\n      return String(object);\n\n    case \"Date\":\n      try {\n        return convert(object, \"Moment\").toDate();\n      } catch (e) {\n        if (e instanceof TypeError) {\n          throw new TypeError(\n            \"Cannot convert object of type \" +\n              getType(object) +\n              \" to type \" +\n              type,\n          );\n        } else {\n          throw e;\n        }\n      }\n\n    case \"Moment\":\n      if (isNumber(object)) {\n        return moment(object);\n      }\n      if (object instanceof Date) {\n        return moment(object.valueOf());\n      } else if (moment.isMoment(object)) {\n        return moment(object);\n      }\n      if (isString(object)) {\n        match = ASPDateRegex.exec(object);\n        if (match) {\n          // object is an ASP date\n          return moment(Number(match[1])); // parse number\n        }\n        match = NumericRegex.exec(object);\n\n        if (match) {\n          return moment(Number(object));\n        }\n\n        return moment(object); // parse string\n      } else {\n        throw new TypeError(\n          \"Cannot convert object of type \" +\n            getType(object) +\n            \" to type \" +\n            type,\n        );\n      }\n\n    case \"ISODate\":\n      if (isNumber(object)) {\n        return new Date(object);\n      } else if (object instanceof Date) {\n        return object.toISOString();\n      } else if (moment.isMoment(object)) {\n        return object.toDate().toISOString();\n      } else if (isString(object)) {\n        match = ASPDateRegex.exec(object);\n        if (match) {\n          // object is an ASP date\n          return new Date(Number(match[1])).toISOString(); // parse number\n        } else {\n          return moment(object).format(); // ISO 8601\n        }\n      } else {\n        throw new Error(\n          \"Cannot convert object of type \" +\n            getType(object) +\n            \" to type ISODate\",\n        );\n      }\n\n    case \"ASPDate\":\n      if (isNumber(object)) {\n        return \"/Date(\" + object + \")/\";\n      } else if (object instanceof Date || moment.isMoment(object)) {\n        return \"/Date(\" + object.valueOf() + \")/\";\n      } else if (isString(object)) {\n        match = ASPDateRegex.exec(object);\n        let value;\n        if (match) {\n          // object is an ASP date\n          value = new Date(Number(match[1])).valueOf(); // parse number\n        } else {\n          value = new Date(object).valueOf(); // parse string\n        }\n        return \"/Date(\" + value + \")/\";\n      } else {\n        throw new Error(\n          \"Cannot convert object of type \" +\n            getType(object) +\n            \" to type ASPDate\",\n        );\n      }\n\n    default:\n      throw new Error(`Unknown type ${type}`);\n  }\n}\n\n/**\n * Create a Data Set like wrapper to seamlessly coerce data types.\n *\n * @param {Object} rawDS - The Data Set with raw uncoerced data.\n * @param {Object} type - A record assigning a data type to property name.\n * @param {string} type.start - Data type name of property 'start'. Default: Date.\n * @param {string} type.end - Data type name of property 'end'. Default: Date.\n *\n * @remarks\n * The write operations (`add`, `remove`, `update` and `updateOnly`) write into\n * the raw (uncoerced) data set. These values are then picked up by a pipe\n * which coerces the values using the [[convert]] function and feeds them into\n * the coerced data set. When querying (`forEach`, `get`, `getIds`, `off` and\n * `on`) the values are then fetched from the coerced data set and already have\n * the required data types. The values are coerced only once when inserted and\n * then the same value is returned each time until it is updated or deleted.\n *\n * For example: `typeCoercedDataSet.add({ id: 7, start: \"2020-01-21\" })` would\n * result in `typeCoercedDataSet.get(7)` returning `{ id: 7, start: moment(new\n * Date(\"2020-01-21\")).toDate() }`.\n *\n * Use the dispose method prior to throwing a reference to this away. Otherwise\n * the pipe connecting the two Data Sets will keep the unaccessible coerced\n * Data Set alive and updated as long as the raw Data Set exists.\n *\n * @returns {Object} A Data Set like object that saves data into the raw Data Set and\n * retrieves them from the coerced Data Set.\n */\nexport function typeCoerceDataSet(\n  rawDS,\n  type = { start: \"Date\", end: \"Date\" },\n) {\n  const idProp = rawDS._idProp;\n  const coercedDS = new DataSet({ fieldId: idProp });\n\n  const pipe = createNewDataPipeFrom(rawDS)\n    .map((item) =>\n      Object.keys(item).reduce((acc, key) => {\n        acc[key] = convert(item[key], type[key]);\n        return acc;\n      }, {}),\n    )\n    .to(coercedDS);\n\n  pipe.all().start();\n\n  return {\n    // Write only.\n    add: (...args) => rawDS.getDataSet().add(...args),\n    remove: (...args) => rawDS.getDataSet().remove(...args),\n    update: (...args) => rawDS.getDataSet().update(...args),\n    updateOnly: (...args) => rawDS.getDataSet().updateOnly(...args),\n    clear: (...args) => rawDS.getDataSet().clear(...args),\n\n    // Read only.\n    forEach: coercedDS.forEach.bind(coercedDS),\n    get: coercedDS.get.bind(coercedDS),\n    getIds: coercedDS.getIds.bind(coercedDS),\n    off: coercedDS.off.bind(coercedDS),\n    on: coercedDS.on.bind(coercedDS),\n\n    get length() {\n      return coercedDS.length;\n    },\n\n    // Non standard.\n    idProp,\n    type,\n\n    rawDS,\n    coercedDS,\n    dispose: () => pipe.stop(),\n  };\n}\n\n// Configure XSS protection\nconst setupXSSCleaner = (options) => {\n  const customXSS = new xssFilter.FilterXSS(options);\n\n  return (input) => {\n    if (typeof input === \"string\") {\n      return customXSS.process(input);\n    }\n    return input; // Leave other types unchanged\n  };\n};\nconst setupNoOpCleaner = (string) => string;\n\n// when nothing else is configured: filter XSS with the lib's default options\nlet configuredXSSProtection = setupXSSCleaner();\n\nconst setupXSSProtection = (options) => {\n  // No options? Do nothing.\n  if (!options) {\n    return;\n  }\n\n  // Disable XSS protection completely on request\n  if (options.disabled === true) {\n    configuredXSSProtection = setupNoOpCleaner;\n    console.warn(\n      \"You disabled XSS protection for vis-Timeline. I sure hope you know what you're doing!\",\n    );\n  } else {\n    // Configure XSS protection with some custom options.\n    // For a list of valid options check the lib's documentation:\n    // https://github.com/leizongmin/js-xss#custom-filter-rules\n    if (options.filterOptions) {\n      configuredXSSProtection = setupXSSCleaner(options.filterOptions);\n    }\n  }\n};\n\nconst availableUtils = {\n  ...util,\n  convert,\n  setupXSSProtection,\n};\n\nObject.defineProperty(availableUtils, \"xss\", {\n  get: function () {\n    return configuredXSSProtection;\n  },\n});\n\nexport default availableUtils;\n", "'use strict';\nvar globalThis = require('../internals/global-this');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar charAt = uncurryThis(''.charAt);\nvar $parseFloat = globalThis.parseFloat;\nvar Symbol = globalThis.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity\n  // MS Edge 18- broken with boxed symbols\n  || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); }));\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n  var trimmedString = trim(toString(string));\n  var result = $parseFloat(trimmedString);\n  return result === 0 && charAt(trimmedString, 0) === '-' ? -0 : result;\n} : $parseFloat;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $parseFloat = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat !== $parseFloat }, {\n  parseFloat: $parseFloat\n});\n", "'use strict';\nrequire('../modules/es.parse-float');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseFloat;\n", "'use strict';\nvar parent = require('../es/parse-float');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/parse-float\");", "import util from \"../../util.js\";\n\n/** Prototype for visual components */\nexport default class Component {\n  /**\n   */\n  constructor() {\n    this.options = null;\n    this.props = null;\n  }\n\n  /**\n   * Set options for the component. The new options will be merged into the\n   * current options.\n   * @param {Object} options\n   */\n  setOptions(options) {\n    if (options) {\n      util.extend(this.options, options);\n    }\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    // should be implemented by the component\n    return false;\n  }\n\n  /**\n   * Destroy the component. Cleanup DOM and event listeners\n   */\n  destroy() {\n    // should be implemented by the component\n  }\n\n  /**\n   * Test whether the component is resized since the last time _isResized() was\n   * called.\n   * @return {Boolean} Returns true if the component is resized\n   * @protected\n   */\n  _isResized() {\n    const resized =\n      this.props._previousWidth !== this.props.width ||\n      this.props._previousHeight !== this.props.height;\n\n    this.props._previousWidth = this.props.width;\n    this.props._previousHeight = this.props.height;\n\n    return resized;\n  }\n}\n", "'use strict';\nvar $ = require('../internals/export');\nvar repeat = require('../internals/string-repeat');\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n  repeat: repeat\n});\n", "'use strict';\nrequire('../../../modules/es.string.repeat');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('String', 'repeat');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../string/virtual/repeat');\n\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n  var own = it.repeat;\n  return typeof it == 'string' || it === StringPrototype\n    || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.repeat) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/repeat');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/repeat\");", "/**\n * used in Core to convert the options into a volatile variable\n *\n * @param {function} moment\n * @param {Object} body\n * @param {Array | Object} hiddenDates\n * @returns {number}\n */\nexport function convertHiddenOptions(moment, body, hiddenDates) {\n  if (hiddenDates && !Array.isArray(hiddenDates)) {\n    return convertHiddenOptions(moment, body, [hiddenDates]);\n  }\n\n  body.hiddenDates = [];\n  if (hiddenDates) {\n    if (Array.isArray(hiddenDates) == true) {\n      for (let i = 0; i < hiddenDates.length; i++) {\n        if (hiddenDates[i].repeat === undefined) {\n          const dateItem = {};\n          dateItem.start = moment(hiddenDates[i].start).toDate().valueOf();\n          dateItem.end = moment(hiddenDates[i].end).toDate().valueOf();\n          body.hiddenDates.push(dateItem);\n        }\n      }\n      body.hiddenDates.sort((a, b) => a.start - b.start); // sort by start time\n    }\n  }\n}\n\n/**\n * create new entrees for the repeating hidden dates\n *\n * @param {function} moment\n * @param {Object} body\n * @param {Array | Object} hiddenDates\n * @returns {null}\n */\nexport function updateHiddenDates(moment, body, hiddenDates) {\n  if (hiddenDates && !Array.isArray(hiddenDates)) {\n    return updateHiddenDates(moment, body, [hiddenDates]);\n  }\n\n  if (hiddenDates && body.domProps.centerContainer.width !== undefined) {\n    convertHiddenOptions(moment, body, hiddenDates);\n\n    const start = moment(body.range.start);\n    const end = moment(body.range.end);\n\n    const totalRange = body.range.end - body.range.start;\n    const pixelTime = totalRange / body.domProps.centerContainer.width;\n\n    for (let i = 0; i < hiddenDates.length; i++) {\n      if (hiddenDates[i].repeat !== undefined) {\n        let startDate = moment(hiddenDates[i].start);\n        let endDate = moment(hiddenDates[i].end);\n\n        if (startDate._d == \"Invalid Date\") {\n          throw new Error(\n            `Supplied start date is not valid: ${hiddenDates[i].start}`,\n          );\n        }\n        if (endDate._d == \"Invalid Date\") {\n          throw new Error(\n            `Supplied end date is not valid: ${hiddenDates[i].end}`,\n          );\n        }\n\n        const duration = endDate - startDate;\n        if (duration >= 4 * pixelTime) {\n          let offset = 0;\n          let runUntil = end.clone();\n          switch (hiddenDates[i].repeat) {\n            case \"daily\": // case of time\n              if (startDate.day() != endDate.day()) {\n                offset = 1;\n              }\n              startDate = startDate\n                .dayOfYear(start.dayOfYear())\n                .year(start.year())\n                .subtract(7, \"days\");\n\n              endDate = endDate\n                .dayOfYear(start.dayOfYear())\n                .year(start.year())\n                .subtract(7 - offset, \"days\");\n\n              runUntil.add(1, \"weeks\");\n              break;\n            case \"weekly\": {\n              const dayOffset = endDate.diff(startDate, \"days\");\n              const day = startDate.day();\n\n              // set the start date to the range.start\n              startDate = startDate\n                .date(start.date())\n                .month(start.month())\n                .year(start.year());\n              endDate = startDate.clone();\n\n              // force\n              startDate = startDate.day(day).subtract(1, \"weeks\");\n              endDate = endDate\n                .day(day)\n                .add(dayOffset, \"days\")\n                .subtract(1, \"weeks\");\n\n              runUntil.add(1, \"weeks\");\n              break;\n            }\n            case \"monthly\":\n              if (startDate.month() != endDate.month()) {\n                offset = 1;\n              }\n              startDate = startDate\n                .month(start.month())\n                .year(start.year())\n                .subtract(1, \"months\");\n\n              endDate = endDate\n                .month(start.month())\n                .year(start.year())\n                .subtract(1, \"months\")\n                .add(offset, \"months\");\n\n              runUntil.add(1, \"months\");\n              break;\n            case \"yearly\":\n              if (startDate.year() != endDate.year()) {\n                offset = 1;\n              }\n              startDate = startDate.year(start.year()).subtract(1, \"years\");\n              endDate = endDate\n                .year(start.year())\n                .subtract(1, \"years\")\n                .add(offset, \"years\");\n\n              runUntil.add(1, \"years\");\n              break;\n            default:\n              console.log(\n                \"Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:\",\n                hiddenDates[i].repeat,\n              );\n              return;\n          }\n          while (startDate < runUntil) {\n            body.hiddenDates.push({\n              start: startDate.valueOf(),\n              end: endDate.valueOf(),\n            });\n            switch (hiddenDates[i].repeat) {\n              case \"daily\":\n                startDate = startDate.add(1, \"days\");\n                endDate = endDate.add(1, \"days\");\n                break;\n              case \"weekly\":\n                startDate = startDate.add(1, \"weeks\");\n                endDate = endDate.add(1, \"weeks\");\n                break;\n              case \"monthly\":\n                startDate = startDate.add(1, \"months\");\n                endDate = endDate.add(1, \"months\");\n                break;\n              case \"yearly\":\n                startDate = startDate.add(1, \"y\");\n                endDate = endDate.add(1, \"y\");\n                break;\n              default:\n                console.log(\n                  \"Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:\",\n                  hiddenDates[i].repeat,\n                );\n                return;\n            }\n          }\n          body.hiddenDates.push({\n            start: startDate.valueOf(),\n            end: endDate.valueOf(),\n          });\n        }\n      }\n    }\n    // remove duplicates, merge where possible\n    removeDuplicates(body);\n    // ensure the new positions are not on hidden dates\n    const startHidden = getIsHidden(body.range.start, body.hiddenDates);\n    const endHidden = getIsHidden(body.range.end, body.hiddenDates);\n    let rangeStart = body.range.start;\n    let rangeEnd = body.range.end;\n    if (startHidden.hidden == true) {\n      rangeStart =\n        body.range.startToFront == true\n          ? startHidden.startDate - 1\n          : startHidden.endDate + 1;\n    }\n    if (endHidden.hidden == true) {\n      rangeEnd =\n        body.range.endToFront == true\n          ? endHidden.startDate - 1\n          : endHidden.endDate + 1;\n    }\n    if (startHidden.hidden == true || endHidden.hidden == true) {\n      body.range._applyRange(rangeStart, rangeEnd);\n    }\n  }\n}\n\n/**\n * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up.\n * Scales with N^2\n *\n * @param {Object} body\n */\nexport function removeDuplicates(body) {\n  const hiddenDates = body.hiddenDates;\n  const safeDates = [];\n  for (var i = 0; i < hiddenDates.length; i++) {\n    for (let j = 0; j < hiddenDates.length; j++) {\n      if (\n        i != j &&\n        hiddenDates[j].remove != true &&\n        hiddenDates[i].remove != true\n      ) {\n        // j inside i\n        if (\n          hiddenDates[j].start >= hiddenDates[i].start &&\n          hiddenDates[j].end <= hiddenDates[i].end\n        ) {\n          hiddenDates[j].remove = true;\n        }\n        // j start inside i\n        else if (\n          hiddenDates[j].start >= hiddenDates[i].start &&\n          hiddenDates[j].start <= hiddenDates[i].end\n        ) {\n          hiddenDates[i].end = hiddenDates[j].end;\n          hiddenDates[j].remove = true;\n        }\n        // j end inside i\n        else if (\n          hiddenDates[j].end >= hiddenDates[i].start &&\n          hiddenDates[j].end <= hiddenDates[i].end\n        ) {\n          hiddenDates[i].start = hiddenDates[j].start;\n          hiddenDates[j].remove = true;\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < hiddenDates.length; i++) {\n    if (hiddenDates[i].remove !== true) {\n      safeDates.push(hiddenDates[i]);\n    }\n  }\n\n  body.hiddenDates = safeDates;\n  body.hiddenDates.sort((a, b) => a.start - b.start); // sort by start time\n}\n\n/**\n * Prints dates to console\n * @param {array} dates\n */\nexport function printDates(dates) {\n  for (let i = 0; i < dates.length; i++) {\n    console.log(\n      i,\n      new Date(dates[i].start),\n      new Date(dates[i].end),\n      dates[i].start,\n      dates[i].end,\n      dates[i].remove,\n    );\n  }\n}\n\n/**\n * Used in TimeStep to avoid the hidden times.\n * @param {function} moment\n * @param {TimeStep} timeStep\n * @param {Date} previousTime\n */\nexport function stepOverHiddenDates(moment, timeStep, previousTime) {\n  let stepInHidden = false;\n  const currentValue = timeStep.current.valueOf();\n  for (let i = 0; i < timeStep.hiddenDates.length; i++) {\n    const startDate = timeStep.hiddenDates[i].start;\n    var endDate = timeStep.hiddenDates[i].end;\n    if (currentValue >= startDate && currentValue < endDate) {\n      stepInHidden = true;\n      break;\n    }\n  }\n\n  if (\n    stepInHidden == true &&\n    currentValue < timeStep._end.valueOf() &&\n    currentValue != previousTime\n  ) {\n    const prevValue = moment(previousTime);\n    const newValue = moment(endDate);\n    //check if the next step should be major\n    if (prevValue.year() != newValue.year()) {\n      timeStep.switchedYear = true;\n    } else if (prevValue.month() != newValue.month()) {\n      timeStep.switchedMonth = true;\n    } else if (prevValue.dayOfYear() != newValue.dayOfYear()) {\n      timeStep.switchedDay = true;\n    }\n\n    timeStep.current = newValue;\n  }\n}\n\n///**\n// * Used in TimeStep to avoid the hidden times.\n// * @param timeStep\n// * @param previousTime\n// */\n//checkFirstStep = function(timeStep) {\n//  var stepInHidden = false;\n//  var currentValue = timeStep.current.valueOf();\n//  for (var i = 0; i < timeStep.hiddenDates.length; i++) {\n//    var startDate = timeStep.hiddenDates[i].start;\n//    var endDate = timeStep.hiddenDates[i].end;\n//    if (currentValue >= startDate && currentValue < endDate) {\n//      stepInHidden = true;\n//      break;\n//    }\n//  }\n//\n//  if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) {\n//    var newValue = moment(endDate);\n//    timeStep.current = newValue.toDate();\n//  }\n//};\n\n/**\n * replaces the Core toScreen methods\n *\n * @param {timeline.Core} Core\n * @param {Date} time\n * @param {number} width\n * @returns {number}\n */\nexport function toScreen(Core, time, width) {\n  let conversion;\n  if (Core.body.hiddenDates.length == 0) {\n    conversion = Core.range.conversion(width);\n    return (time.valueOf() - conversion.offset) * conversion.scale;\n  } else {\n    const hidden = getIsHidden(time, Core.body.hiddenDates);\n    if (hidden.hidden == true) {\n      time = hidden.startDate;\n    }\n\n    const duration = getHiddenDurationBetween(\n      Core.body.hiddenDates,\n      Core.range.start,\n      Core.range.end,\n    );\n    if (time < Core.range.start) {\n      conversion = Core.range.conversion(width, duration);\n      const hiddenBeforeStart = getHiddenDurationBeforeStart(\n        Core.body.hiddenDates,\n        time,\n        conversion.offset,\n      );\n      time = Core.options.moment(time).toDate().valueOf();\n      time = time + hiddenBeforeStart;\n      return -(conversion.offset - time.valueOf()) * conversion.scale;\n    } else if (time > Core.range.end) {\n      const rangeAfterEnd = { start: Core.range.start, end: time };\n      time = correctTimeForHidden(\n        Core.options.moment,\n        Core.body.hiddenDates,\n        rangeAfterEnd,\n        time,\n      );\n      conversion = Core.range.conversion(width, duration);\n      return (time.valueOf() - conversion.offset) * conversion.scale;\n    } else {\n      time = correctTimeForHidden(\n        Core.options.moment,\n        Core.body.hiddenDates,\n        Core.range,\n        time,\n      );\n      conversion = Core.range.conversion(width, duration);\n      return (time.valueOf() - conversion.offset) * conversion.scale;\n    }\n  }\n}\n\n/**\n * Replaces the core toTime methods\n *\n * @param {timeline.Core} Core\n * @param {number} x\n * @param {number} width\n * @returns {Date}\n */\nexport function toTime(Core, x, width) {\n  if (Core.body.hiddenDates.length == 0) {\n    const conversion = Core.range.conversion(width);\n    return new Date(x / conversion.scale + conversion.offset);\n  } else {\n    const hiddenDuration = getHiddenDurationBetween(\n      Core.body.hiddenDates,\n      Core.range.start,\n      Core.range.end,\n    );\n    const totalDuration = Core.range.end - Core.range.start - hiddenDuration;\n    const partialDuration = (totalDuration * x) / width;\n    const accumulatedHiddenDuration = getAccumulatedHiddenDuration(\n      Core.body.hiddenDates,\n      Core.range,\n      partialDuration,\n    );\n\n    return new Date(\n      accumulatedHiddenDuration + partialDuration + Core.range.start,\n    );\n  }\n}\n\n/**\n * Support function\n *\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {number} start\n * @param {number} end\n * @returns {number}\n */\nexport function getHiddenDurationBetween(hiddenDates, start, end) {\n  let duration = 0;\n  for (let i = 0; i < hiddenDates.length; i++) {\n    const startDate = hiddenDates[i].start;\n    const endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= start && endDate < end) {\n      duration += endDate - startDate;\n    }\n  }\n  return duration;\n}\n\n/**\n * Support function\n *\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {number} start\n * @param {number} end\n * @returns {number}\n */\nexport function getHiddenDurationBeforeStart(hiddenDates, start, end) {\n  let duration = 0;\n  for (let i = 0; i < hiddenDates.length; i++) {\n    const startDate = hiddenDates[i].start;\n    const endDate = hiddenDates[i].end;\n\n    if (startDate >= start && endDate <= end) {\n      duration += endDate - startDate;\n    }\n  }\n  return duration;\n}\n\n/**\n * Support function\n * @param {function} moment\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {{start: number, end: number}} range\n * @param {Date} time\n * @returns {number}\n */\nexport function correctTimeForHidden(moment, hiddenDates, range, time) {\n  time = moment(time).toDate().valueOf();\n  time -= getHiddenDurationBefore(moment, hiddenDates, range, time);\n  return time;\n}\n\n/**\n * Support function\n * @param {function} moment\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {{start: number, end: number}} range\n * @param {Date} time\n * @returns {number}\n */\nexport function getHiddenDurationBefore(moment, hiddenDates, range, time) {\n  let timeOffset = 0;\n  time = moment(time).toDate().valueOf();\n\n  for (let i = 0; i < hiddenDates.length; i++) {\n    const startDate = hiddenDates[i].start;\n    const endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= range.start && endDate < range.end) {\n      if (time >= endDate) {\n        timeOffset += endDate - startDate;\n      }\n    }\n  }\n  return timeOffset;\n}\n\n/**\n * sum the duration from start to finish, including the hidden duration,\n * until the required amount has been reached, return the accumulated hidden duration\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {{start: number, end: number}} range\n * @param {number} [requiredDuration=0]\n * @returns {number}\n */\nexport function getAccumulatedHiddenDuration(\n  hiddenDates,\n  range,\n  requiredDuration,\n) {\n  let hiddenDuration = 0;\n  let duration = 0;\n  let previousPoint = range.start;\n  //printDates(hiddenDates)\n  for (let i = 0; i < hiddenDates.length; i++) {\n    const startDate = hiddenDates[i].start;\n    const endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= range.start && endDate < range.end) {\n      duration += startDate - previousPoint;\n      previousPoint = endDate;\n      if (duration >= requiredDuration) {\n        break;\n      } else {\n        hiddenDuration += endDate - startDate;\n      }\n    }\n  }\n\n  return hiddenDuration;\n}\n\n/**\n * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {Date} time\n * @param {number} direction\n * @param {boolean} correctionEnabled\n * @returns {Date|number}\n */\nexport function snapAwayFromHidden(\n  hiddenDates,\n  time,\n  direction,\n  correctionEnabled,\n) {\n  const isHidden = getIsHidden(time, hiddenDates);\n  if (isHidden.hidden == true) {\n    if (direction < 0) {\n      if (correctionEnabled == true) {\n        return isHidden.startDate - (isHidden.endDate - time) - 1;\n      } else {\n        return isHidden.startDate - 1;\n      }\n    } else {\n      if (correctionEnabled == true) {\n        return isHidden.endDate + (time - isHidden.startDate) + 1;\n      } else {\n        return isHidden.endDate + 1;\n      }\n    }\n  } else {\n    return time;\n  }\n}\n\n/**\n * Check if a time is hidden\n *\n * @param {Date} time\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @returns {{hidden: boolean, startDate: Window.start, endDate: *}}\n */\nexport function getIsHidden(time, hiddenDates) {\n  for (let i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n\n    if (time >= startDate && time < endDate) {\n      // if the start is entering a hidden zone\n      return { hidden: true, startDate, endDate };\n    }\n  }\n  return { hidden: false, startDate, endDate };\n}\n", "import util from \"../util.js\";\nimport moment from \"../module/moment.js\";\nimport Component from \"./component/Component.js\";\nimport * as DateUtil from \"./DateUtil.js\";\n\n/**\n * A Range controls a numeric range with a start and end value.\n * The Range adjusts the range based on mouse events or programmatic changes,\n * and triggers events when the range is changing or has been changed.\n */\nexport default class Range extends Component {\n  /**\n   * @param {{dom: Object, domProps: Object, emitter: Emitter}} body\n   * @param {Object} [options]    See description at Range.setOptions\n   * @constructor Range\n   * @extends Component\n   */\n  constructor(body, options) {\n    super();\n    const now = moment().hours(0).minutes(0).seconds(0).milliseconds(0);\n    const start = now.clone().add(-3, \"days\").valueOf();\n    const end = now.clone().add(3, \"days\").valueOf();\n    this.millisecondsPerPixelCache = undefined;\n\n    if (options === undefined) {\n      this.start = start;\n      this.end = end;\n    } else {\n      this.start = options.start || start;\n      this.end = options.end || end;\n    }\n\n    this.rolling = false;\n\n    this.body = body;\n    this.deltaDifference = 0;\n    this.scaleOffset = 0;\n    this.startToFront = false;\n    this.endToFront = true;\n\n    // default options\n    this.defaultOptions = {\n      rtl: false,\n      start: null,\n      end: null,\n      moment,\n      direction: \"horizontal\", // 'horizontal' or 'vertical'\n      moveable: true,\n      zoomable: true,\n      min: null,\n      max: null,\n      zoomMin: 10, // milliseconds\n      zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000, // milliseconds\n      rollingMode: {\n        follow: false,\n        offset: 0.5,\n      },\n    };\n    this.options = util.extend({}, this.defaultOptions);\n    this.props = {\n      touch: {},\n    };\n    this.animationTimer = null;\n\n    // drag listeners for dragging\n    this.body.emitter.on(\"panstart\", this._onDragStart.bind(this));\n    this.body.emitter.on(\"panmove\", this._onDrag.bind(this));\n    this.body.emitter.on(\"panend\", this._onDragEnd.bind(this));\n\n    // mouse wheel for zooming\n    this.body.emitter.on(\"mousewheel\", this._onMouseWheel.bind(this));\n\n    // pinch to zoom\n    this.body.emitter.on(\"touch\", this._onTouch.bind(this));\n    this.body.emitter.on(\"pinch\", this._onPinch.bind(this));\n\n    // on click of rolling mode button\n    this.body.dom.rollingModeBtn.addEventListener(\n      \"click\",\n      this.startRolling.bind(this),\n    );\n\n    this.setOptions(options);\n  }\n\n  /**\n   * Set options for the range controller\n   * @param {Object} options      Available options:\n   *                              {number | Date | String} start  Start date for the range\n   *                              {number | Date | String} end    End date for the range\n   *                              {number} min    Minimum value for start\n   *                              {number} max    Maximum value for end\n   *                              {number} zoomMin    Set a minimum value for\n   *                                                  (end - start).\n   *                              {number} zoomMax    Set a maximum value for\n   *                                                  (end - start).\n   *                              {boolean} moveable Enable moving of the range\n   *                                                 by dragging. True by default\n   *                              {boolean} zoomable Enable zooming of the range\n   *                                                 by pinching/scrolling. True by default\n   */\n  setOptions(options) {\n    if (options) {\n      // copy the options that we know\n      const fields = [\n        \"animation\",\n        \"direction\",\n        \"min\",\n        \"max\",\n        \"zoomMin\",\n        \"zoomMax\",\n        \"moveable\",\n        \"zoomable\",\n        \"moment\",\n        \"activate\",\n        \"hiddenDates\",\n        \"zoomKey\",\n        \"zoomFriction\",\n        \"rtl\",\n        \"showCurrentTime\",\n        \"rollingMode\",\n        \"horizontalScroll\",\n        \"horizontalScrollKey\",\n        \"horizontalScrollInvert\",\n        \"verticalScroll\",\n      ];\n      util.selectiveExtend(fields, this.options, options);\n\n      if (options.rollingMode && options.rollingMode.follow) {\n        this.startRolling();\n      }\n      if (\"start\" in options || \"end\" in options) {\n        // apply a new range. both start and end are optional\n        this.setRange(options.start, options.end);\n      }\n    }\n  }\n\n  /**\n   * Start auto refreshing the current time bar\n   */\n  startRolling() {\n    const me = this;\n\n    /**\n     *  Updates the current time.\n     */\n    function update() {\n      me.stopRolling();\n      me.rolling = true;\n\n      let interval = me.end - me.start;\n      const t = util.convert(new Date(), \"Date\").valueOf();\n      const rollingModeOffset =\n        (me.options.rollingMode && me.options.rollingMode.offset) || 0.5;\n\n      const start = t - interval * rollingModeOffset;\n      const end = t + interval * (1 - rollingModeOffset);\n\n      const options = {\n        animation: false,\n      };\n      me.setRange(start, end, options);\n\n      // determine interval to refresh\n      const scale = me.conversion(me.body.domProps.center.width).scale;\n      interval = 1 / scale / 10;\n      if (interval < 30) interval = 30;\n      if (interval > 1000) interval = 1000;\n\n      me.body.dom.rollingModeBtn.style.visibility = \"hidden\";\n      // start a renderTimer to adjust for the new time\n      me.currentTimeTimer = setTimeout(update, interval);\n    }\n\n    update();\n  }\n\n  /**\n   * Stop auto refreshing the current time bar\n   */\n  stopRolling() {\n    if (this.currentTimeTimer !== undefined) {\n      clearTimeout(this.currentTimeTimer);\n      this.rolling = false;\n      this.body.dom.rollingModeBtn.style.visibility = \"visible\";\n    }\n  }\n\n  /**\n   * Set a new start and end range\n   * @param {Date | number | string} start\n   * @param {Date | number | string} end\n   * @param {Object} options      Available options:\n   *                              {boolean | {duration: number, easingFunction: string}} [animation=false]\n   *                                    If true, the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   *                              {boolean} [byUser=false]\n   *                              {Event}  event  Mouse event\n   * @param {Function} callback     a callback function to be executed at the end of this function\n   * @param {Function} frameCallback    a callback function executed each frame of the range animation.\n   *                                    The callback will be passed three parameters:\n   *                                    {number} easeCoefficient    an easing coefficent\n   *                                    {boolean} willDraw          If true the caller will redraw after the callback completes\n   *                                    {boolean} done              If true then animation is ending after the current frame\n   * @return {void}\n   */\n  setRange(start, end, options, callback, frameCallback) {\n    if (!options) {\n      options = {};\n    }\n    if (options.byUser !== true) {\n      options.byUser = false;\n    }\n    const me = this;\n    const finalStart =\n      start != undefined ? util.convert(start, \"Date\").valueOf() : null;\n    const finalEnd =\n      end != undefined ? util.convert(end, \"Date\").valueOf() : null;\n    this._cancelAnimation();\n    this.millisecondsPerPixelCache = undefined;\n\n    if (options.animation) {\n      // true or an Object\n      const initStart = this.start;\n      const initEnd = this.end;\n      const duration =\n        typeof options.animation === \"object\" && \"duration\" in options.animation\n          ? options.animation.duration\n          : 500;\n      const easingName =\n        typeof options.animation === \"object\" &&\n        \"easingFunction\" in options.animation\n          ? options.animation.easingFunction\n          : \"easeInOutQuad\";\n      const easingFunction = util.easingFunctions[easingName];\n      if (!easingFunction) {\n        throw new Error(\n          `Unknown easing function ${JSON.stringify(easingName)}. Choose from: ${Object.keys(util.easingFunctions).join(\", \")}`,\n        );\n      }\n\n      const initTime = Date.now();\n      let anyChanged = false;\n\n      const next = () => {\n        if (!me.props.touch.dragging) {\n          const now = Date.now();\n          const time = now - initTime;\n          const ease = easingFunction(time / duration);\n          const done = time > duration;\n          const s =\n            done || finalStart === null\n              ? finalStart\n              : initStart + (finalStart - initStart) * ease;\n          const e =\n            done || finalEnd === null\n              ? finalEnd\n              : initEnd + (finalEnd - initEnd) * ease;\n\n          changed = me._applyRange(s, e);\n          DateUtil.updateHiddenDates(\n            me.options.moment,\n            me.body,\n            me.options.hiddenDates,\n          );\n          anyChanged = anyChanged || changed;\n\n          const params = {\n            start: new Date(me.start),\n            end: new Date(me.end),\n            byUser: options.byUser,\n            event: options.event,\n          };\n\n          if (frameCallback) {\n            frameCallback(ease, changed, done);\n          }\n\n          if (changed) {\n            me.body.emitter.emit(\"rangechange\", params);\n          }\n\n          if (done) {\n            if (anyChanged) {\n              me.body.emitter.emit(\"rangechanged\", params);\n              if (callback) {\n                return callback();\n              }\n            }\n          } else {\n            // animate with as high as possible frame rate, leave 20 ms in between\n            // each to prevent the browser from blocking\n            me.animationTimer = setTimeout(next, 20);\n          }\n        }\n      };\n\n      return next();\n    } else {\n      var changed = this._applyRange(finalStart, finalEnd);\n      DateUtil.updateHiddenDates(\n        this.options.moment,\n        this.body,\n        this.options.hiddenDates,\n      );\n      if (changed) {\n        const params = {\n          start: new Date(this.start),\n          end: new Date(this.end),\n          byUser: options.byUser,\n          event: options.event,\n        };\n\n        this.body.emitter.emit(\"rangechange\", params);\n        clearTimeout(me.timeoutID);\n        me.timeoutID = setTimeout(() => {\n          me.body.emitter.emit(\"rangechanged\", params);\n        }, 200);\n        if (callback) {\n          return callback();\n        }\n      }\n    }\n  }\n\n  /**\n   * Get the number of milliseconds per pixel.\n   *\n   * @returns {undefined|number}\n   */\n  getMillisecondsPerPixel() {\n    if (this.millisecondsPerPixelCache === undefined) {\n      this.millisecondsPerPixelCache =\n        (this.end - this.start) / this.body.dom.center.clientWidth;\n    }\n    return this.millisecondsPerPixelCache;\n  }\n\n  /**\n   * Stop an animation\n   * @private\n   */\n  _cancelAnimation() {\n    if (this.animationTimer) {\n      clearTimeout(this.animationTimer);\n      this.animationTimer = null;\n    }\n  }\n\n  /**\n   * Set a new start and end range. This method is the same as setRange, but\n   * does not trigger a range change and range changed event, and it returns\n   * true when the range is changed\n   * @param {number} [start]\n   * @param {number} [end]\n   * @return {boolean} changed\n   * @private\n   */\n  _applyRange(start, end) {\n    let newStart =\n      start != null ? util.convert(start, \"Date\").valueOf() : this.start;\n    let newEnd = end != null ? util.convert(end, \"Date\").valueOf() : this.end;\n    const max =\n      this.options.max != null\n        ? util.convert(this.options.max, \"Date\").valueOf()\n        : null;\n    const min =\n      this.options.min != null\n        ? util.convert(this.options.min, \"Date\").valueOf()\n        : null;\n    let diff;\n\n    // check for valid number\n    if (isNaN(newStart) || newStart === null) {\n      throw new Error(`Invalid start \"${start}\"`);\n    }\n    if (isNaN(newEnd) || newEnd === null) {\n      throw new Error(`Invalid end \"${end}\"`);\n    }\n\n    // prevent end < start\n    if (newEnd < newStart) {\n      newEnd = newStart;\n    }\n\n    // prevent start < min\n    if (min !== null) {\n      if (newStart < min) {\n        diff = min - newStart;\n        newStart += diff;\n        newEnd += diff;\n\n        // prevent end > max\n        if (max != null) {\n          if (newEnd > max) {\n            newEnd = max;\n          }\n        }\n      }\n    }\n\n    // prevent end > max\n    if (max !== null) {\n      if (newEnd > max) {\n        diff = newEnd - max;\n        newStart -= diff;\n        newEnd -= diff;\n\n        // prevent start < min\n        if (min != null) {\n          if (newStart < min) {\n            newStart = min;\n          }\n        }\n      }\n    }\n\n    // prevent (end-start) < zoomMin\n    if (this.options.zoomMin !== null) {\n      let zoomMin = parseFloat(this.options.zoomMin);\n      if (zoomMin < 0) {\n        zoomMin = 0;\n      }\n      if (newEnd - newStart < zoomMin) {\n        // compensate for a scale of 0.5 ms\n        const compensation = 0.5;\n        if (\n          this.end - this.start === zoomMin &&\n          newStart >= this.start - compensation &&\n          newEnd <= this.end\n        ) {\n          // ignore this action, we are already zoomed to the minimum\n          newStart = this.start;\n          newEnd = this.end;\n        } else {\n          // zoom to the minimum\n          diff = zoomMin - (newEnd - newStart);\n          newStart -= diff / 2;\n          newEnd += diff / 2;\n        }\n      }\n    }\n\n    // prevent (end-start) > zoomMax\n    if (this.options.zoomMax !== null) {\n      let zoomMax = parseFloat(this.options.zoomMax);\n      if (zoomMax < 0) {\n        zoomMax = 0;\n      }\n\n      if (newEnd - newStart > zoomMax) {\n        if (\n          this.end - this.start === zoomMax &&\n          newStart < this.start &&\n          newEnd > this.end\n        ) {\n          // ignore this action, we are already zoomed to the maximum\n          newStart = this.start;\n          newEnd = this.end;\n        } else {\n          // zoom to the maximum\n          diff = newEnd - newStart - zoomMax;\n          newStart += diff / 2;\n          newEnd -= diff / 2;\n        }\n      }\n    }\n\n    const changed = this.start != newStart || this.end != newEnd;\n\n    // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not necessarily of type Range)\n    if (\n      !(\n        (newStart >= this.start && newStart <= this.end) ||\n        (newEnd >= this.start && newEnd <= this.end)\n      ) &&\n      !(\n        (this.start >= newStart && this.start <= newEnd) ||\n        (this.end >= newStart && this.end <= newEnd)\n      )\n    ) {\n      this.body.emitter.emit(\"checkRangedItems\");\n    }\n\n    this.start = newStart;\n    this.end = newEnd;\n    return changed;\n  }\n\n  /**\n   * Retrieve the current range.\n   * @return {Object} An object with start and end properties\n   */\n  getRange() {\n    return {\n      start: this.start,\n      end: this.end,\n    };\n  }\n\n  /**\n   * Calculate the conversion offset and scale for current range, based on\n   * the provided width\n   * @param {number} width\n   * @param {number} [totalHidden=0]\n   * @returns {{offset: number, scale: number}} conversion\n   */\n  conversion(width, totalHidden) {\n    return Range.conversion(this.start, this.end, width, totalHidden);\n  }\n\n  /**\n   * Static method to calculate the conversion offset and scale for a range,\n   * based on the provided start, end, and width\n   * @param {number} start\n   * @param {number} end\n   * @param {number} width\n   * @param {number} [totalHidden=0]\n   * @returns {{offset: number, scale: number}} conversion\n   */\n  static conversion(start, end, width, totalHidden) {\n    if (totalHidden === undefined) {\n      totalHidden = 0;\n    }\n    if (width != 0 && end - start != 0) {\n      return {\n        offset: start,\n        scale: width / (end - start - totalHidden),\n      };\n    } else {\n      return {\n        offset: 0,\n        scale: 1,\n      };\n    }\n  }\n\n  /**\n   * Start dragging horizontally or vertically\n   * @param {Event} event\n   * @private\n   */\n  _onDragStart(event) {\n    this.deltaDifference = 0;\n    this.previousDelta = 0;\n\n    // only allow dragging when configured as movable\n    if (!this.options.moveable) return;\n\n    // only start dragging when the mouse is inside the current range\n    if (!this._isInsideRange(event)) return;\n\n    // refuse to drag when we where pinching to prevent the timeline make a jump\n    // when releasing the fingers in opposite order from the touch screen\n    if (!this.props.touch.allowDragging) return;\n\n    this.stopRolling();\n\n    this.props.touch.start = this.start;\n    this.props.touch.end = this.end;\n    this.props.touch.dragging = true;\n\n    if (this.body.dom.root) {\n      this.body.dom.root.style.cursor = \"move\";\n    }\n  }\n\n  /**\n   * Perform dragging operation\n   * @param {Event} event\n   * @private\n   */\n  _onDrag(event) {\n    if (!event) return;\n\n    if (!this.props.touch.dragging) return;\n\n    // only allow dragging when configured as movable\n    if (!this.options.moveable) return;\n\n    // TODO: this may be redundant in hammerjs2\n    // refuse to drag when we where pinching to prevent the timeline make a jump\n    // when releasing the fingers in opposite order from the touch screen\n    if (!this.props.touch.allowDragging) return;\n\n    const direction = this.options.direction;\n    validateDirection(direction);\n    let delta = direction == \"horizontal\" ? event.deltaX : event.deltaY;\n    delta -= this.deltaDifference;\n    let interval = this.props.touch.end - this.props.touch.start;\n\n    // normalize dragging speed if cutout is in between.\n    const duration = DateUtil.getHiddenDurationBetween(\n      this.body.hiddenDates,\n      this.start,\n      this.end,\n    );\n    interval -= duration;\n\n    const width =\n      direction == \"horizontal\"\n        ? this.body.domProps.center.width\n        : this.body.domProps.center.height;\n    let diffRange;\n    if (this.options.rtl) {\n      diffRange = (delta / width) * interval;\n    } else {\n      diffRange = (-delta / width) * interval;\n    }\n\n    const newStart = this.props.touch.start + diffRange;\n    const newEnd = this.props.touch.end + diffRange;\n\n    // snapping times away from hidden zones\n    const safeStart = DateUtil.snapAwayFromHidden(\n      this.body.hiddenDates,\n      newStart,\n      this.previousDelta - delta,\n      true,\n    );\n    const safeEnd = DateUtil.snapAwayFromHidden(\n      this.body.hiddenDates,\n      newEnd,\n      this.previousDelta - delta,\n      true,\n    );\n    if (safeStart != newStart || safeEnd != newEnd) {\n      this.deltaDifference += delta;\n      this.props.touch.start = safeStart;\n      this.props.touch.end = safeEnd;\n      this._onDrag(event);\n      return;\n    }\n\n    this.previousDelta = delta;\n    this._applyRange(newStart, newEnd);\n\n    const startDate = new Date(this.start);\n    const endDate = new Date(this.end);\n\n    // fire a rangechange event\n    this.body.emitter.emit(\"rangechange\", {\n      start: startDate,\n      end: endDate,\n      byUser: true,\n      event,\n    });\n\n    // fire a panmove event\n    this.body.emitter.emit(\"panmove\");\n  }\n\n  /**\n   * Stop dragging operation\n   * @param {event} event\n   * @private\n   */\n  _onDragEnd(event) {\n    if (!this.props.touch.dragging) return;\n\n    // only allow dragging when configured as movable\n    if (!this.options.moveable) return;\n\n    // TODO: this may be redundant in hammerjs2\n    // refuse to drag when we where pinching to prevent the timeline make a jump\n    // when releasing the fingers in opposite order from the touch screen\n    if (!this.props.touch.allowDragging) return;\n\n    this.props.touch.dragging = false;\n    if (this.body.dom.root) {\n      this.body.dom.root.style.cursor = \"auto\";\n    }\n\n    // fire a rangechanged event\n    this.body.emitter.emit(\"rangechanged\", {\n      start: new Date(this.start),\n      end: new Date(this.end),\n      byUser: true,\n      event,\n    });\n  }\n\n  /**\n   * Event handler for mouse wheel event, used to zoom\n   * Code from http://adomas.org/javascript-mouse-wheel/\n   * @param {Event} event\n   * @private\n   */\n  _onMouseWheel(event) {\n    // retrieve delta\n    let delta = 0;\n    if (event.wheelDelta) {\n      /* IE/Opera. */\n      delta = event.wheelDelta / 120;\n    } else if (event.detail) {\n      /* Mozilla case. */\n      // In Mozilla, sign of delta is different than in IE.\n      // Also, delta is multiple of 3.\n      delta = -event.detail / 3;\n    } else if (event.deltaY) {\n      delta = -event.deltaY / 3;\n    }\n\n    // don't allow zoom when the according key is pressed and the zoomKey option or not zoomable but movable\n    if (\n      (this.options.zoomKey &&\n        !event[this.options.zoomKey] &&\n        this.options.zoomable) ||\n      (!this.options.zoomable && this.options.moveable)\n    ) {\n      return;\n    }\n\n    // only allow zooming when configured as zoomable and moveable\n    if (!(this.options.zoomable && this.options.moveable)) return;\n\n    // only zoom when the mouse is inside the current range\n    if (!this._isInsideRange(event)) return;\n\n    // If delta is nonzero, handle it.\n    // Basically, delta is now positive if wheel was scrolled up,\n    // and negative, if wheel was scrolled down.\n    if (delta) {\n      // perform the zoom action. Delta is normally 1 or -1\n\n      // adjust a negative delta such that zooming in with delta 0.1\n      // equals zooming out with a delta -0.1\n\n      const zoomFriction = this.options.zoomFriction || 5;\n      let scale;\n      if (delta < 0) {\n        scale = 1 - delta / zoomFriction;\n      } else {\n        scale = 1 / (1 + delta / zoomFriction);\n      }\n\n      // calculate center, the date to zoom around\n      let pointerDate;\n      if (this.rolling) {\n        const rollingModeOffset =\n          (this.options.rollingMode && this.options.rollingMode.offset) || 0.5;\n        pointerDate = this.start + (this.end - this.start) * rollingModeOffset;\n      } else {\n        const pointer = this.getPointer(\n          { x: event.clientX, y: event.clientY },\n          this.body.dom.center,\n        );\n        pointerDate = this._pointerToDate(pointer);\n      }\n      this.zoom(scale, pointerDate, delta, event);\n\n      // Prevent default actions caused by mouse wheel\n      // (else the page and timeline both scroll)\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * Start of a touch gesture\n   * @param {Event} event\n   * @private\n   */\n  _onTouch(event) {\n    // eslint-disable-line no-unused-vars\n    this.props.touch.start = this.start;\n    this.props.touch.end = this.end;\n    this.props.touch.allowDragging = true;\n    this.props.touch.center = null;\n    this.props.touch.centerDate = null;\n    this.scaleOffset = 0;\n    this.deltaDifference = 0;\n    // Disable the browser default handling of this event.\n    util.preventDefault(event);\n  }\n\n  /**\n   * Handle pinch event\n   * @param {Event} event\n   * @private\n   */\n  _onPinch(event) {\n    // only allow zooming when configured as zoomable and moveable\n    if (!(this.options.zoomable && this.options.moveable)) return;\n\n    // Disable the browser default handling of this event.\n    util.preventDefault(event);\n\n    this.props.touch.allowDragging = false;\n\n    if (!this.props.touch.center) {\n      this.props.touch.center = this.getPointer(\n        event.center,\n        this.body.dom.center,\n      );\n      this.props.touch.centerDate = this._pointerToDate(\n        this.props.touch.center,\n      );\n    }\n\n    this.stopRolling();\n    const scale = 1 / (event.scale + this.scaleOffset);\n    const centerDate = this.props.touch.centerDate;\n\n    const hiddenDuration = DateUtil.getHiddenDurationBetween(\n      this.body.hiddenDates,\n      this.start,\n      this.end,\n    );\n    const hiddenDurationBefore = DateUtil.getHiddenDurationBefore(\n      this.options.moment,\n      this.body.hiddenDates,\n      this,\n      centerDate,\n    );\n    const hiddenDurationAfter = hiddenDuration - hiddenDurationBefore;\n\n    // calculate new start and end\n    let newStart =\n      centerDate -\n      hiddenDurationBefore +\n      (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale;\n    let newEnd =\n      centerDate +\n      hiddenDurationAfter +\n      (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale;\n\n    // snapping times away from hidden zones\n    this.startToFront = 1 - scale <= 0; // used to do the right auto correction with periodic hidden times\n    this.endToFront = scale - 1 <= 0; // used to do the right auto correction with periodic hidden times\n\n    const safeStart = DateUtil.snapAwayFromHidden(\n      this.body.hiddenDates,\n      newStart,\n      1 - scale,\n      true,\n    );\n    const safeEnd = DateUtil.snapAwayFromHidden(\n      this.body.hiddenDates,\n      newEnd,\n      scale - 1,\n      true,\n    );\n    if (safeStart != newStart || safeEnd != newEnd) {\n      this.props.touch.start = safeStart;\n      this.props.touch.end = safeEnd;\n      this.scaleOffset = 1 - event.scale;\n      newStart = safeStart;\n      newEnd = safeEnd;\n    }\n\n    const options = {\n      animation: false,\n      byUser: true,\n      event,\n    };\n    this.setRange(newStart, newEnd, options);\n\n    this.startToFront = false; // revert to default\n    this.endToFront = true; // revert to default\n  }\n\n  /**\n   * Test whether the mouse from a mouse event is inside the visible window,\n   * between the current start and end date\n   * @param {Object} event\n   * @return {boolean} Returns true when inside the visible window\n   * @private\n   */\n  _isInsideRange(event) {\n    // calculate the time where the mouse is, check whether inside\n    // and no scroll action should happen.\n    const clientX = event.center ? event.center.x : event.clientX;\n    const centerContainerRect =\n      this.body.dom.centerContainer.getBoundingClientRect();\n    const x = this.options.rtl\n      ? clientX - centerContainerRect.left\n      : centerContainerRect.right - clientX;\n    const time = this.body.util.toTime(x);\n\n    return time >= this.start && time <= this.end;\n  }\n\n  /**\n   * Helper function to calculate the center date for zooming\n   * @param {{x: number, y: number}} pointer\n   * @return {number} date\n   * @private\n   */\n  _pointerToDate(pointer) {\n    let conversion;\n    const direction = this.options.direction;\n\n    validateDirection(direction);\n\n    if (direction == \"horizontal\") {\n      return this.body.util.toTime(pointer.x).valueOf();\n    } else {\n      const height = this.body.domProps.center.height;\n      conversion = this.conversion(height);\n      return pointer.y / conversion.scale + conversion.offset;\n    }\n  }\n\n  /**\n   * Get the pointer location relative to the location of the dom element\n   * @param {{x: number, y: number}} touch\n   * @param {Element} element   HTML DOM element\n   * @return {{x: number, y: number}} pointer\n   * @private\n   */\n  getPointer(touch, element) {\n    const elementRect = element.getBoundingClientRect();\n    if (this.options.rtl) {\n      return {\n        x: elementRect.right - touch.x,\n        y: touch.y - elementRect.top,\n      };\n    } else {\n      return {\n        x: touch.x - elementRect.left,\n        y: touch.y - elementRect.top,\n      };\n    }\n  }\n\n  /**\n   * Zoom the range the given scale in or out. Start and end date will\n   * be adjusted, and the timeline will be redrawn. You can optionally give a\n   * date around which to zoom.\n   * For example, try scale = 0.9 or 1.1\n   * @param {number} scale      Scaling factor. Values above 1 will zoom out,\n   *                            values below 1 will zoom in.\n   * @param {number} [center]   Value representing a date around which will\n   *                            be zoomed.\n   * @param {number} delta\n   * @param {Event} event\n   */\n  zoom(scale, center, delta, event) {\n    // if centerDate is not provided, take it half between start Date and end Date\n    if (center == null) {\n      center = (this.start + this.end) / 2;\n    }\n\n    const hiddenDuration = DateUtil.getHiddenDurationBetween(\n      this.body.hiddenDates,\n      this.start,\n      this.end,\n    );\n    const hiddenDurationBefore = DateUtil.getHiddenDurationBefore(\n      this.options.moment,\n      this.body.hiddenDates,\n      this,\n      center,\n    );\n    const hiddenDurationAfter = hiddenDuration - hiddenDurationBefore;\n\n    // calculate new start and end\n    let newStart =\n      center -\n      hiddenDurationBefore +\n      (this.start - (center - hiddenDurationBefore)) * scale;\n    let newEnd =\n      center +\n      hiddenDurationAfter +\n      (this.end - (center + hiddenDurationAfter)) * scale;\n\n    // snapping times away from hidden zones\n    this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times\n    this.endToFront = -delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times\n    const safeStart = DateUtil.snapAwayFromHidden(\n      this.body.hiddenDates,\n      newStart,\n      delta,\n      true,\n    );\n    const safeEnd = DateUtil.snapAwayFromHidden(\n      this.body.hiddenDates,\n      newEnd,\n      -delta,\n      true,\n    );\n    if (safeStart != newStart || safeEnd != newEnd) {\n      newStart = safeStart;\n      newEnd = safeEnd;\n    }\n\n    const options = {\n      animation: false,\n      byUser: true,\n      event,\n    };\n    this.setRange(newStart, newEnd, options);\n\n    this.startToFront = false; // revert to default\n    this.endToFront = true; // revert to default\n  }\n\n  /**\n   * Move the range with a given delta to the left or right. Start and end\n   * value will be adjusted. For example, try delta = 0.1 or -0.1\n   * @param {number}  delta     Moving amount. Positive value will move right,\n   *                            negative value will move left\n   */\n  move(delta) {\n    // zoom start Date and end Date relative to the centerDate\n    const diff = this.end - this.start;\n\n    // apply new values\n    const newStart = this.start + diff * delta;\n    const newEnd = this.end + diff * delta;\n\n    // TODO: reckon with min and max range\n\n    this.start = newStart;\n    this.end = newEnd;\n  }\n\n  /**\n   * Move the range to a new center point\n   * @param {number} moveTo      New center point of the range\n   */\n  moveTo(moveTo) {\n    const center = (this.start + this.end) / 2;\n\n    const diff = center - moveTo;\n\n    // calculate new start and end\n    const newStart = this.start - diff;\n    const newEnd = this.end - diff;\n\n    const options = {\n      animation: false,\n      byUser: true,\n      event: null,\n    };\n    this.setRange(newStart, newEnd, options);\n  }\n\n  /**\n   * Destroy the Range\n   */\n  destroy() {\n    this.stopRolling();\n  }\n}\n\n/**\n * Test whether direction has a valid value\n * @param {string} direction    'horizontal' or 'vertical'\n */\nfunction validateDirection(direction) {\n  if (direction != \"horizontal\" && direction != \"vertical\") {\n    throw new TypeError(\n      `Unknown direction \"${direction}\". Choose \"horizontal\" or \"vertical\".`,\n    );\n  }\n}\n", "'use strict';\nrequire('../modules/web.timers');\nvar path = require('../internals/path');\n\nmodule.exports = path.setInterval;\n", "module.exports = require(\"core-js-pure/stable/set-interval\");", "'use strict';\n\nvar _firstTarget = null; // singleton, will contain the target element where the touch event started\n\n/**\n * Extend an Hammer.js instance with event propagation.\n *\n * Features:\n * - Events emitted by hammer will propagate in order from child to parent\n *   elements.\n * - Events are extended with a function `event.stopPropagation()` to stop\n *   propagation to parent elements.\n * - An option `preventDefault` to stop all default browser behavior.\n *\n * Usage:\n *   var hammer = propagatingHammer(new Hammer(element));\n *   var hammer = propagatingHammer(new Hammer(element), {preventDefault: true});\n *\n * @param {Hammer.Manager} hammer   An hammer instance.\n * @param {Object} [options]        Available options:\n *                                  - `preventDefault: true | false | 'mouse' | 'touch' | 'pen'`.\n *                                    Enforce preventing the default browser behavior.\n *                                    Cannot be set to `false`.\n * @return {Hammer.Manager} Returns the same hammer instance with extended\n *                          functionality\n */\nexport default function propagating(hammer, options) {\n  var _options = options || {\n    preventDefault: false\n  };\n\n  if (hammer.Manager) {\n    // This looks like the Hammer constructor.\n    // Overload the constructors with our own.\n    var Hammer = hammer;\n\n    var PropagatingHammer = function(element, options) {\n      var o = Object.create(_options);\n      if (options) Hammer.assign(o, options);\n      return propagating(new Hammer(element, o), o);\n    };\n    Hammer.assign(PropagatingHammer, Hammer);\n\n    PropagatingHammer.Manager = function (element, options) {\n      var o = Object.create(_options);\n      if (options) Hammer.assign(o, options);\n      return propagating(new Hammer.Manager(element, o), o);\n    };\n\n    return PropagatingHammer;\n  }\n\n  // create a wrapper object which will override the functions\n  // `on`, `off`, `destroy`, and `emit` of the hammer instance\n  var wrapper = Object.create(hammer);\n\n  // attach to DOM element\n  var element = hammer.element;\n\n  if(!element.hammer) element.hammer = [];\n  element.hammer.push(wrapper);\n\n  // register an event to catch the start of a gesture and store the\n  // target in a singleton\n  hammer.on('hammer.input', function (event) {\n    if (_options.preventDefault === true || (_options.preventDefault === event.pointerType)) {\n      event.preventDefault();\n    }\n    if (event.isFirst) {\n      _firstTarget = event.target;\n    }\n  });\n\n  /** @type {Object.<String, Array.<function>>} */\n  wrapper._handlers = {};\n\n  /**\n   * Register a handler for one or multiple events\n   * @param {String} events    A space separated string with events\n   * @param {function} handler A callback function, called as handler(event)\n   * @returns {Hammer.Manager} Returns the hammer instance\n   */\n  wrapper.on = function (events, handler) {\n    // register the handler\n    split(events).forEach(function (event) {\n      var _handlers = wrapper._handlers[event];\n      if (!_handlers) {\n        wrapper._handlers[event] = _handlers = [];\n\n        // register the static, propagated handler\n        hammer.on(event, propagatedHandler);\n      }\n      _handlers.push(handler);\n    });\n\n    return wrapper;\n  };\n\n  /**\n   * Unregister a handler for one or multiple events\n   * @param {String} events      A space separated string with events\n   * @param {function} [handler] Optional. The registered handler. If not\n   *                             provided, all handlers for given events\n   *                             are removed.\n   * @returns {Hammer.Manager}   Returns the hammer instance\n   */\n  wrapper.off = function (events, handler) {\n    // unregister the handler\n    split(events).forEach(function (event) {\n      var _handlers = wrapper._handlers[event];\n      if (_handlers) {\n        _handlers = handler ? _handlers.filter(function (h) {\n          return h !== handler;\n        }) : [];\n\n        if (_handlers.length > 0) {\n          wrapper._handlers[event] = _handlers;\n        }\n        else {\n          // remove static, propagated handler\n          hammer.off(event, propagatedHandler);\n          delete wrapper._handlers[event];\n        }\n      }\n    });\n\n    return wrapper;\n  };\n\n  /**\n   * Emit to the event listeners\n   * @param {string} eventType\n   * @param {Event} event\n   */\n  wrapper.emit = function(eventType, event) {\n    _firstTarget = event.target;\n    hammer.emit(eventType, event);\n  };\n\n  wrapper.destroy = function () {\n    // Detach from DOM element\n    var hammers = hammer.element.hammer;\n    var idx = hammers.indexOf(wrapper);\n    if(idx !== -1) hammers.splice(idx,1);\n    if(!hammers.length) delete hammer.element.hammer;\n\n    // clear all handlers\n    wrapper._handlers = {};\n\n    // call original hammer destroy\n    hammer.destroy();\n  };\n\n  // split a string with space separated words\n  function split(events) {\n    return events.match(/[^ ]+/g);\n  }\n\n  /**\n   * A static event handler, applying event propagation.\n   * @param {Object} event\n   */\n  function propagatedHandler(event) {\n    // let only a single hammer instance handle this event\n    if (event.type !== 'hammer.input') {\n      // it is possible that the same srcEvent is used with multiple hammer events,\n      // we keep track on which events are handled in an object _handled\n      if (!event.srcEvent._handled) {\n        event.srcEvent._handled = {};\n      }\n\n      if (event.srcEvent._handled[event.type]) {\n        return;\n      }\n      else {\n        event.srcEvent._handled[event.type] = true;\n      }\n    }\n\n    // attach a stopPropagation function to the event\n    var stopped = false;\n    event.stopPropagation = function () {\n      stopped = true;\n    };\n\n    //wrap the srcEvent's stopPropagation to also stop hammer propagation:\n    var srcStop = event.srcEvent.stopPropagation.bind(event.srcEvent);\n    if(typeof srcStop == \"function\") {\n      event.srcEvent.stopPropagation = function(){\n        srcStop();\n        event.stopPropagation();\n      };\n    }\n\n    // attach firstTarget property to the event\n    event.firstTarget = _firstTarget;\n\n    // propagate over all elements (until stopped)\n    var elem = _firstTarget.isConnected ? _firstTarget : event.target;\n    while (elem && !stopped) {\n      var elemHammer = elem.hammer;\n      if(elemHammer){\n        var _handlers;\n        for(var k = 0; k < elemHammer.length; k++){\n          _handlers = elemHammer[k]._handlers[event.type];\n          if(_handlers) for (var i = 0; i < _handlers.length && !stopped; i++) {\n            _handlers[i](event);\n          }\n        }\n      }\n      elem = elem.parentNode;\n    }\n  }\n\n  return wrapper;\n};\n", "import PropagatingHammer from \"propagating-hammerjs\";\nimport Hammer from \"@egjs/hammerjs\";\n\n/**\n * Setup a mock hammer.js object, for unit testing.\n *\n * Inspiration: https://github.com/uber/deck.gl/pull/658\n *\n * @returns {{on: noop, off: noop, destroy: noop, emit: noop, get: get}}\n */\nfunction hammerMock() {\n  const noop = () => {};\n\n  return {\n    on: noop,\n    off: noop,\n    destroy: noop,\n    emit: noop,\n\n    get() {\n      return {\n        set: noop,\n      };\n    },\n  };\n}\n\nlet modifiedHammer;\n\nif (typeof window !== \"undefined\") {\n  const OurHammer = window[\"Hammer\"] || Hammer;\n  modifiedHammer = PropagatingHammer(OurHammer, {\n    preventDefault: \"mouse\",\n  });\n} else {\n  modifiedHammer = function () {\n    // hammer.js is only available in a browser, not in node.js. Replacing it with a mock object.\n    return hammerMock();\n  };\n}\n\nexport default modifiedHammer;\n", "/**\n * Register a touch event, taking place before a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nexport function onTouch(hammer, callback) {\n  callback.inputHandler = function (event) {\n    if (event.isFirst) {\n      callback(event);\n    }\n  };\n\n  hammer.on(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Register a release event, taking place after a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n * @returns {*}\n */\nexport function onRelease(hammer, callback) {\n  callback.inputHandler = function (event) {\n    if (event.isFinal) {\n      callback(event);\n    }\n  };\n\n  return hammer.on(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Unregister a touch event, taking place before a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nexport function offTouch(hammer, callback) {\n  hammer.off(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Unregister a release event, taking place before a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\n\nexport const offRelease = offTouch;\n\n/**\n * Hack the PinchRecognizer such that it doesn't prevent default behavior\n * for vertical panning.\n *\n * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932\n *\n * @param {Hammer.Pinch} pinchRecognizer\n * @return {Hammer.Pinch} returns the pinchRecognizer\n */\nexport function disablePreventDefaultVertically(pinchRecognizer) {\n  const TOUCH_ACTION_PAN_Y = \"pan-y\";\n\n  pinchRecognizer.getTouchAction = function () {\n    // default method returns [TOUCH_ACTION_NONE]\n    return [TOUCH_ACTION_PAN_Y];\n  };\n\n  return pinchRecognizer;\n}\n", "import moment from \"../module/moment.js\";\nimport * as DateUtil from \"./DateUtil.js\";\nimport util from \"../util.js\";\n\n/**\n * The class TimeStep is an iterator for dates. You provide a start date and an\n * end date. The class itself determines the best scale (step size) based on the\n * provided start Date, end Date, and minimumStep.\n *\n * If minimumStep is provided, the step size is chosen as close as possible\n * to the minimumStep but larger than minimumStep. If minimumStep is not\n * provided, the scale is set to 1 DAY.\n * The minimumStep should correspond with the onscreen size of about 6 characters\n *\n * Alternatively, you can set a scale by hand.\n * After creation, you can initialize the class by executing first(). Then you\n * can iterate from the start date to the end date via next(). You can check if\n * the end date is reached with the function hasNext(). After each step, you can\n * retrieve the current date via getCurrent().\n * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours,\n * days, to years.\n *\n * Version: 1.2\n *\n */\nclass TimeStep {\n  /**\n   * @param {Date} [start]         The start date, for example new Date(2010, 9, 21)\n   *                               or new Date(2010, 9, 21, 23, 45, 00)\n   * @param {Date} [end]           The end date\n   * @param {number} [minimumStep] Optional. Minimum step size in milliseconds\n   * @param {Date|Array.<Date>} [hiddenDates] Optional.\n   * @param {{showMajorLabels: boolean, showWeekScale: boolean}} [options] Optional.\n   * @constructor  TimeStep\n   */\n  constructor(start, end, minimumStep, hiddenDates, options) {\n    this.moment = (options && options.moment) || moment;\n    this.options = options ? options : {};\n\n    // variables\n    this.current = this.moment();\n    this._start = this.moment();\n    this._end = this.moment();\n\n    this.autoScale = true;\n    this.scale = \"day\";\n    this.step = 1;\n\n    // initialize the range\n    this.setRange(start, end, minimumStep);\n\n    // hidden Dates options\n    this.switchedDay = false;\n    this.switchedMonth = false;\n    this.switchedYear = false;\n    if (Array.isArray(hiddenDates)) {\n      this.hiddenDates = hiddenDates;\n    } else if (hiddenDates != undefined) {\n      this.hiddenDates = [hiddenDates];\n    } else {\n      this.hiddenDates = [];\n    }\n\n    this.format = TimeStep.FORMAT; // default formatting\n  }\n\n  /**\n   * Set custom constructor function for moment. Can be used to set dates\n   * to UTC or to set a utcOffset.\n   * @param {function} moment\n   */\n  setMoment(moment) {\n    this.moment = moment;\n\n    // update the date properties, can have a new utcOffset\n    this.current = this.moment(this.current.valueOf());\n    this._start = this.moment(this._start.valueOf());\n    this._end = this.moment(this._end.valueOf());\n  }\n\n  /**\n   * Set custom formatting for the minor an major labels of the TimeStep.\n   * Both `minorLabels` and `majorLabels` are an Object with properties:\n   * 'millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'week', 'month', 'year'.\n   * @param {{minorLabels: Object, majorLabels: Object}} format\n   */\n  setFormat(format) {\n    const defaultFormat = util.deepExtend({}, TimeStep.FORMAT);\n    this.format = util.deepExtend(defaultFormat, format);\n  }\n\n  /**\n   * Set a new range\n   * If minimumStep is provided, the step size is chosen as close as possible\n   * to the minimumStep but larger than minimumStep. If minimumStep is not\n   * provided, the scale is set to 1 DAY.\n   * The minimumStep should correspond with the onscreen size of about 6 characters\n   * @param {Date} [start]      The start date and time.\n   * @param {Date} [end]        The end date and time.\n   * @param {int} [minimumStep] Optional. Minimum step size in milliseconds\n   */\n  setRange(start, end, minimumStep) {\n    if (!(start instanceof Date) || !(end instanceof Date)) {\n      throw \"No legal start or end date in method setRange\";\n    }\n\n    this._start =\n      start != undefined ? this.moment(start.valueOf()) : Date.now();\n    this._end = end != undefined ? this.moment(end.valueOf()) : Date.now();\n\n    if (this.autoScale) {\n      this.setMinimumStep(minimumStep);\n    }\n  }\n\n  /**\n   * Set the range iterator to the start date.\n   */\n  start() {\n    this.current = this._start.clone();\n    this.roundToMinor();\n  }\n\n  /**\n   * Round the current date to the first minor date value\n   * This must be executed once when the current date is set to start Date\n   */\n  roundToMinor() {\n    // round to floor\n    // to prevent year & month scales rounding down to the first day of week we perform this separately\n    if (this.scale == \"week\") {\n      this.current.weekday(0);\n    }\n    // IMPORTANT: we have no breaks in this switch! (this is no bug)\n    // noinspection FallThroughInSwitchStatementJS\n    switch (this.scale) {\n      case \"year\":\n        this.current = this.current\n          .year(this.step * Math.floor(this.current.year() / this.step))\n          .month(0);\n      // eslint-disable-next-line no-fallthrough\n      case \"month\":\n        this.current = this.current.date(1);\n      // eslint-disable-next-line no-fallthrough\n      case \"week\":\n      case \"day\":\n      case \"weekday\":\n        this.current = this.current.hours(0);\n      // eslint-disable-next-line no-fallthrough\n      case \"hour\":\n        this.current = this.current.minutes(0);\n      // eslint-disable-next-line no-fallthrough\n      case \"minute\":\n        this.current = this.current.seconds(0);\n      // eslint-disable-next-line no-fallthrough\n      case \"second\":\n        this.current = this.current.milliseconds(0);\n      //case 'millisecond': // nothing to do for milliseconds\n    }\n\n    if (this.step != 1) {\n      // round down to the first minor value that is a multiple of the current step size\n      let priorCurrent = this.current.clone();\n      switch (this.scale) {\n        case \"millisecond\":\n          this.current = this.current.subtract(\n            this.current.milliseconds() % this.step,\n            \"milliseconds\",\n          );\n          break;\n        case \"second\":\n          this.current = this.current.subtract(\n            this.current.seconds() % this.step,\n            \"seconds\",\n          );\n          break;\n        case \"minute\":\n          this.current = this.current.subtract(\n            this.current.minutes() % this.step,\n            \"minutes\",\n          );\n          break;\n        case \"hour\":\n          this.current = this.current.subtract(\n            this.current.hours() % this.step,\n            \"hours\",\n          );\n          break;\n        case \"weekday\": // intentional fall through\n        case \"day\":\n          this.current = this.current.subtract(\n            (this.current.date() - 1) % this.step,\n            \"day\",\n          );\n          break;\n        case \"week\":\n          this.current = this.current.subtract(\n            this.current.week() % this.step,\n            \"week\",\n          );\n          break;\n        case \"month\":\n          this.current = this.current.subtract(\n            this.current.month() % this.step,\n            \"month\",\n          );\n          break;\n        case \"year\":\n          this.current = this.current.subtract(\n            this.current.year() % this.step,\n            \"year\",\n          );\n          break;\n        default:\n          break;\n      }\n      if (!priorCurrent.isSame(this.current)) {\n        this.current = this.moment(\n          DateUtil.snapAwayFromHidden(\n            this.hiddenDates,\n            this.current.valueOf(),\n            -1,\n            true,\n          ),\n        );\n      }\n    }\n  }\n\n  /**\n   * Check if the there is a next step\n   * @return {boolean}  true if the current date has not passed the end date\n   */\n  hasNext() {\n    return this.current.valueOf() <= this._end.valueOf();\n  }\n\n  /**\n   * Do the next step\n   */\n  next() {\n    const prev = this.current.valueOf();\n\n    // Two cases, needed to prevent issues with switching daylight savings\n    // (end of March and end of October)\n    switch (this.scale) {\n      case \"millisecond\":\n        this.current = this.current.add(this.step, \"millisecond\");\n        break;\n      case \"second\":\n        this.current = this.current.add(this.step, \"second\");\n        break;\n      case \"minute\":\n        this.current = this.current.add(this.step, \"minute\");\n        break;\n      case \"hour\":\n        this.current = this.current.add(this.step, \"hour\");\n\n        if (this.current.month() < 6) {\n          this.current = this.current.subtract(\n            this.current.hours() % this.step,\n            \"hour\",\n          );\n        } else {\n          if (this.current.hours() % this.step !== 0) {\n            this.current = this.current.add(\n              this.step - (this.current.hours() % this.step),\n              \"hour\",\n            );\n          }\n        }\n        break;\n      case \"weekday\": // intentional fall through\n      case \"day\":\n        this.current = this.current.add(this.step, \"day\");\n        break;\n      case \"week\":\n        if (this.current.weekday() !== 0) {\n          // we had a month break not correlating with a week's start before\n          this.current = this.current.weekday(0).add(this.step, \"week\"); // switch back to week cycles\n        } else if (this.options.showMajorLabels === false) {\n          this.current = this.current.add(this.step, \"week\"); // the default case\n        } else {\n          // first day of the week\n          const nextWeek = this.current.clone();\n          nextWeek.add(1, \"week\");\n          if (nextWeek.isSame(this.current, \"month\")) {\n            // is the first day of the next week in the same month?\n            this.current = this.current.add(this.step, \"week\"); // the default case\n          } else {\n            // inject a step at each first day of the month\n            this.current = this.current.add(this.step, \"week\").date(1);\n          }\n        }\n        break;\n      case \"month\":\n        this.current = this.current.add(this.step, \"month\");\n        break;\n      case \"year\":\n        this.current = this.current.add(this.step, \"year\");\n        break;\n      default:\n        break;\n    }\n\n    if (this.step != 1) {\n      // round down to the correct major value\n      switch (this.scale) {\n        case \"millisecond\":\n          if (\n            this.current.milliseconds() > 0 &&\n            this.current.milliseconds() < this.step\n          )\n            this.current = this.current.milliseconds(0);\n          break;\n        case \"second\":\n          if (this.current.seconds() > 0 && this.current.seconds() < this.step)\n            this.current = this.current.seconds(0);\n          break;\n        case \"minute\":\n          if (this.current.minutes() > 0 && this.current.minutes() < this.step)\n            this.current = this.current.minutes(0);\n          break;\n        case \"hour\":\n          if (this.current.hours() > 0 && this.current.hours() < this.step)\n            this.current = this.current.hours(0);\n          break;\n        case \"weekday\": // intentional fall through\n        case \"day\":\n          if (this.current.date() < this.step + 1)\n            this.current = this.current.date(1);\n          break;\n        case \"week\":\n          if (this.current.week() < this.step)\n            this.current = this.current.week(1); // week numbering starts at 1, not 0\n          break;\n        case \"month\":\n          if (this.current.month() < this.step)\n            this.current = this.current.month(0);\n          break;\n        case \"year\":\n          break; // nothing to do for year\n        default:\n          break;\n      }\n    }\n\n    // safety mechanism: if current time is still unchanged, move to the end\n    if (this.current.valueOf() == prev) {\n      this.current = this._end.clone();\n    }\n\n    // Reset switches for year, month and day. Will get set to true where appropriate in DateUtil.stepOverHiddenDates\n    this.switchedDay = false;\n    this.switchedMonth = false;\n    this.switchedYear = false;\n\n    DateUtil.stepOverHiddenDates(this.moment, this, prev);\n  }\n\n  /**\n   * Get the current datetime\n   * @return {Moment}  current The current date\n   */\n  getCurrent() {\n    return this.current.clone();\n  }\n\n  /**\n   * Set a custom scale. Autoscaling will be disabled.\n   * For example setScale('minute', 5) will result\n   * in minor steps of 5 minutes, and major steps of an hour.\n   *\n   * @param {{scale: string, step: number}} params\n   *                               An object containing two properties:\n   *                               - A string 'scale'. Choose from 'millisecond', 'second',\n   *                                 'minute', 'hour', 'weekday', 'day', 'week', 'month', 'year'.\n   *                               - A number 'step'. A step size, by default 1.\n   *                                 Choose for example 1, 2, 5, or 10.\n   */\n  setScale(params) {\n    if (params && typeof params.scale == \"string\") {\n      this.scale = params.scale;\n      this.step = params.step > 0 ? params.step : 1;\n      this.autoScale = false;\n    }\n  }\n\n  /**\n   * Enable or disable autoscaling\n   * @param {boolean} enable  If true, autoascaling is set true\n   */\n  setAutoScale(enable) {\n    this.autoScale = enable;\n  }\n\n  /**\n   * Automatically determine the scale that bests fits the provided minimum step\n   * @param {number} [minimumStep]  The minimum step size in milliseconds\n   */\n  setMinimumStep(minimumStep) {\n    if (minimumStep == undefined) {\n      return;\n    }\n\n    //var b = asc + ds;\n\n    const stepYear = 1000 * 60 * 60 * 24 * 30 * 12;\n    const stepMonth = 1000 * 60 * 60 * 24 * 30;\n    const stepDay = 1000 * 60 * 60 * 24;\n    const stepHour = 1000 * 60 * 60;\n    const stepMinute = 1000 * 60;\n    const stepSecond = 1000;\n    const stepMillisecond = 1;\n\n    // find the smallest step that is larger than the provided minimumStep\n    if (stepYear * 1000 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 1000;\n    }\n    if (stepYear * 500 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 500;\n    }\n    if (stepYear * 100 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 100;\n    }\n    if (stepYear * 50 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 50;\n    }\n    if (stepYear * 10 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 10;\n    }\n    if (stepYear * 5 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 5;\n    }\n    if (stepYear > minimumStep) {\n      this.scale = \"year\";\n      this.step = 1;\n    }\n    if (stepMonth * 3 > minimumStep) {\n      this.scale = \"month\";\n      this.step = 3;\n    }\n    if (stepMonth > minimumStep) {\n      this.scale = \"month\";\n      this.step = 1;\n    }\n    if (stepDay * 7 > minimumStep && this.options.showWeekScale) {\n      this.scale = \"week\";\n      this.step = 1;\n    }\n    if (stepDay * 2 > minimumStep) {\n      this.scale = \"day\";\n      this.step = 2;\n    }\n    if (stepDay > minimumStep) {\n      this.scale = \"day\";\n      this.step = 1;\n    }\n    if (stepDay / 2 > minimumStep) {\n      this.scale = \"weekday\";\n      this.step = 1;\n    }\n    if (stepHour * 4 > minimumStep) {\n      this.scale = \"hour\";\n      this.step = 4;\n    }\n    if (stepHour > minimumStep) {\n      this.scale = \"hour\";\n      this.step = 1;\n    }\n    if (stepMinute * 15 > minimumStep) {\n      this.scale = \"minute\";\n      this.step = 15;\n    }\n    if (stepMinute * 10 > minimumStep) {\n      this.scale = \"minute\";\n      this.step = 10;\n    }\n    if (stepMinute * 5 > minimumStep) {\n      this.scale = \"minute\";\n      this.step = 5;\n    }\n    if (stepMinute > minimumStep) {\n      this.scale = \"minute\";\n      this.step = 1;\n    }\n    if (stepSecond * 15 > minimumStep) {\n      this.scale = \"second\";\n      this.step = 15;\n    }\n    if (stepSecond * 10 > minimumStep) {\n      this.scale = \"second\";\n      this.step = 10;\n    }\n    if (stepSecond * 5 > minimumStep) {\n      this.scale = \"second\";\n      this.step = 5;\n    }\n    if (stepSecond > minimumStep) {\n      this.scale = \"second\";\n      this.step = 1;\n    }\n    if (stepMillisecond * 200 > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 200;\n    }\n    if (stepMillisecond * 100 > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 100;\n    }\n    if (stepMillisecond * 50 > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 50;\n    }\n    if (stepMillisecond * 10 > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 10;\n    }\n    if (stepMillisecond * 5 > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 5;\n    }\n    if (stepMillisecond > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 1;\n    }\n  }\n\n  /**\n   * Snap a date to a rounded value.\n   * The snap intervals are dependent on the current scale and step.\n   * Static function\n   * @param {Date} date    the date to be snapped.\n   * @param {string} scale Current scale, can be 'millisecond', 'second',\n   *                       'minute', 'hour', 'weekday, 'day', 'week', 'month', 'year'.\n   * @param {number} step  Current step (1, 2, 4, 5, ...\n   * @return {Date} snappedDate\n   */\n  static snap(date, scale, step) {\n    let clone = moment(date);\n\n    if (scale == \"year\") {\n      const year = clone.year() + Math.round(clone.month() / 12);\n      clone = clone\n        .year(Math.round(year / step) * step)\n        .month(0)\n        .date(0)\n        .hours(0)\n        .minutes(0)\n        .seconds(0)\n        .milliseconds(0);\n    } else if (scale == \"month\") {\n      if (clone.date() > 15) {\n        clone = clone.date(1).add(1, \"month\"); // important: first set Date to 1, after that change the month.\n      } else {\n        clone = clone.date(1);\n      }\n\n      clone = clone.hours(0).minutes(0).seconds(0).milliseconds(0);\n    } else if (scale == \"week\") {\n      if (clone.weekday() > 2) {\n        // doing it the momentjs locale aware way\n        clone = clone.weekday(0).add(1, \"week\");\n      } else {\n        clone = clone.weekday(0);\n      }\n\n      clone = clone.hours(0).minutes(0).seconds(0).milliseconds(0);\n    } else if (scale == \"day\") {\n      //noinspection FallthroughInSwitchStatementJS\n      switch (step) {\n        case 5:\n        case 2:\n          clone = clone.hours(Math.round(clone.hours() / 24) * 24);\n          break;\n        default:\n          clone = clone.hours(Math.round(clone.hours() / 12) * 12);\n          break;\n      }\n      clone = clone.minutes(0).seconds(0).milliseconds(0);\n    } else if (scale == \"weekday\") {\n      //noinspection FallthroughInSwitchStatementJS\n      switch (step) {\n        case 5:\n        case 2:\n          clone = clone.hours(Math.round(clone.hours() / 12) * 12);\n          break;\n        default:\n          clone = clone.hours(Math.round(clone.hours() / 6) * 6);\n          break;\n      }\n      clone = clone.minutes(0).seconds(0).milliseconds(0);\n    } else if (scale == \"hour\") {\n      switch (step) {\n        case 4:\n          clone = clone.minutes(Math.round(clone.minutes() / 60) * 60);\n          break;\n        default:\n          clone = clone.minutes(Math.round(clone.minutes() / 30) * 30);\n          break;\n      }\n      clone = clone.seconds(0).milliseconds(0);\n    } else if (scale == \"minute\") {\n      //noinspection FallthroughInSwitchStatementJS\n      switch (step) {\n        case 15:\n        case 10:\n          clone = clone.minutes(Math.round(clone.minutes() / 5) * 5).seconds(0);\n          break;\n        case 5:\n          clone = clone.seconds(Math.round(clone.seconds() / 60) * 60);\n          break;\n        default:\n          clone = clone.seconds(Math.round(clone.seconds() / 30) * 30);\n          break;\n      }\n      clone = clone.milliseconds(0);\n    } else if (scale == \"second\") {\n      //noinspection FallthroughInSwitchStatementJS\n      switch (step) {\n        case 15:\n        case 10:\n          clone = clone\n            .seconds(Math.round(clone.seconds() / 5) * 5)\n            .milliseconds(0);\n          break;\n        case 5:\n          clone = clone.milliseconds(\n            Math.round(clone.milliseconds() / 1000) * 1000,\n          );\n          break;\n        default:\n          clone = clone.milliseconds(\n            Math.round(clone.milliseconds() / 500) * 500,\n          );\n          break;\n      }\n    } else if (scale == \"millisecond\") {\n      const _step = step > 5 ? step / 2 : 1;\n      clone = clone.milliseconds(\n        Math.round(clone.milliseconds() / _step) * _step,\n      );\n    }\n\n    return clone;\n  }\n\n  /**\n   * Check if the current value is a major value (for example when the step\n   * is DAY, a major value is each first day of the MONTH)\n   * @return {boolean} true if current date is major, else false.\n   */\n  isMajor() {\n    if (this.switchedYear == true) {\n      switch (this.scale) {\n        case \"year\":\n        case \"month\":\n        case \"week\":\n        case \"weekday\":\n        case \"day\":\n        case \"hour\":\n        case \"minute\":\n        case \"second\":\n        case \"millisecond\":\n          return true;\n        default:\n          return false;\n      }\n    } else if (this.switchedMonth == true) {\n      switch (this.scale) {\n        case \"week\":\n        case \"weekday\":\n        case \"day\":\n        case \"hour\":\n        case \"minute\":\n        case \"second\":\n        case \"millisecond\":\n          return true;\n        default:\n          return false;\n      }\n    } else if (this.switchedDay == true) {\n      switch (this.scale) {\n        case \"millisecond\":\n        case \"second\":\n        case \"minute\":\n        case \"hour\":\n          return true;\n        default:\n          return false;\n      }\n    }\n\n    const date = this.moment(this.current);\n    switch (this.scale) {\n      case \"millisecond\":\n        return date.milliseconds() == 0;\n      case \"second\":\n        return date.seconds() == 0;\n      case \"minute\":\n        return date.hours() == 0 && date.minutes() == 0;\n      case \"hour\":\n        return date.hours() == 0;\n      case \"weekday\": // intentional fall through\n      case \"day\":\n        return this.options.showWeekScale\n          ? date.isoWeekday() == 1\n          : date.date() == 1;\n      case \"week\":\n        return date.date() == 1;\n      case \"month\":\n        return date.month() == 0;\n      case \"year\":\n        return false;\n      default:\n        return false;\n    }\n  }\n\n  /**\n   * Returns formatted text for the minor axislabel, depending on the current\n   * date and the scale. For example when scale is MINUTE, the current time is\n   * formatted as \"hh:mm\".\n   * @param {Date} [date=this.current] custom date. if not provided, current date is taken\n   * @returns {String}\n   */\n  getLabelMinor(date) {\n    if (date == undefined) {\n      date = this.current;\n    }\n    if (date instanceof Date) {\n      date = this.moment(date);\n    }\n\n    if (typeof this.format.minorLabels === \"function\") {\n      return this.format.minorLabels(date, this.scale, this.step);\n    }\n\n    const format = this.format.minorLabels[this.scale];\n    // noinspection FallThroughInSwitchStatementJS\n    switch (this.scale) {\n      case \"week\":\n        // Don't draw the minor label if this date is the first day of a month AND if it's NOT the start of the week.\n        // The 'date' variable may actually be the 'next' step when called from TimeAxis' _repaintLabels.\n        if (date.date() === 1 && date.weekday() !== 0) {\n          return \"\";\n        }\n      // eslint-disable-next-line no-fallthrough\n      default:\n        return format && format.length > 0\n          ? this.moment(date).format(format)\n          : \"\";\n    }\n  }\n\n  /**\n   * Returns formatted text for the major axis label, depending on the current\n   * date and the scale. For example when scale is MINUTE, the major scale is\n   * hours, and the hour will be formatted as \"hh\".\n   * @param {Date} [date=this.current] custom date. if not provided, current date is taken\n   * @returns {String}\n   */\n  getLabelMajor(date) {\n    if (date == undefined) {\n      date = this.current;\n    }\n    if (date instanceof Date) {\n      date = this.moment(date);\n    }\n\n    if (typeof this.format.majorLabels === \"function\") {\n      return this.format.majorLabels(date, this.scale, this.step);\n    }\n\n    const format = this.format.majorLabels[this.scale];\n    return format && format.length > 0 ? this.moment(date).format(format) : \"\";\n  }\n\n  /**\n   * get class name\n   * @return {string} class name\n   */\n  getClassName() {\n    const _moment = this.moment;\n    const m = this.moment(this.current);\n    const current = m.locale ? m.locale(\"en\") : m.lang(\"en\"); // old versions of moment have .lang() function\n    const step = this.step;\n    const classNames = [];\n\n    /**\n     *\n     * @param {number} value\n     * @returns {String}\n     */\n    function even(value) {\n      return (value / step) % 2 == 0 ? \" vis-even\" : \" vis-odd\";\n    }\n\n    /**\n     *\n     * @param {Date} date\n     * @returns {String}\n     */\n    function today(date) {\n      if (date.isSame(Date.now(), \"day\")) {\n        return \" vis-today\";\n      }\n      if (date.isSame(_moment().add(1, \"day\"), \"day\")) {\n        return \" vis-tomorrow\";\n      }\n      if (date.isSame(_moment().add(-1, \"day\"), \"day\")) {\n        return \" vis-yesterday\";\n      }\n      return \"\";\n    }\n\n    /**\n     *\n     * @param {Date} date\n     * @returns {String}\n     */\n    function currentWeek(date) {\n      return date.isSame(Date.now(), \"week\") ? \" vis-current-week\" : \"\";\n    }\n\n    /**\n     *\n     * @param {Date} date\n     * @returns {String}\n     */\n    function currentMonth(date) {\n      return date.isSame(Date.now(), \"month\") ? \" vis-current-month\" : \"\";\n    }\n\n    /**\n     *\n     * @param {Date} date\n     * @returns {String}\n     */\n    function currentYear(date) {\n      return date.isSame(Date.now(), \"year\") ? \" vis-current-year\" : \"\";\n    }\n\n    switch (this.scale) {\n      case \"millisecond\":\n        classNames.push(today(current));\n        classNames.push(even(current.milliseconds()));\n        break;\n      case \"second\":\n        classNames.push(today(current));\n        classNames.push(even(current.seconds()));\n        break;\n      case \"minute\":\n        classNames.push(today(current));\n        classNames.push(even(current.minutes()));\n        break;\n      case \"hour\":\n        classNames.push(\n          `vis-h${current.hours()}${this.step == 4 ? \"-h\" + (current.hours() + 4) : \"\"}`,\n        );\n        classNames.push(today(current));\n        classNames.push(even(current.hours()));\n        break;\n      case \"weekday\":\n        classNames.push(`vis-${current.format(\"dddd\").toLowerCase()}`);\n        classNames.push(today(current));\n        classNames.push(currentWeek(current));\n        classNames.push(even(current.date()));\n        break;\n      case \"day\":\n        classNames.push(`vis-day${current.date()}`);\n        classNames.push(`vis-${current.format(\"MMMM\").toLowerCase()}`);\n        classNames.push(today(current));\n        classNames.push(currentMonth(current));\n        classNames.push(this.step <= 2 ? today(current) : \"\");\n        classNames.push(\n          this.step <= 2 ? `vis-${current.format(\"dddd\").toLowerCase()}` : \"\",\n        );\n        classNames.push(even(current.date() - 1));\n        break;\n      case \"week\":\n        classNames.push(`vis-week${current.format(\"w\")}`);\n        classNames.push(currentWeek(current));\n        classNames.push(even(current.week()));\n        break;\n      case \"month\":\n        classNames.push(`vis-${current.format(\"MMMM\").toLowerCase()}`);\n        classNames.push(currentMonth(current));\n        classNames.push(even(current.month()));\n        break;\n      case \"year\":\n        classNames.push(`vis-year${current.year()}`);\n        classNames.push(currentYear(current));\n        classNames.push(even(current.year()));\n        break;\n    }\n    return classNames.filter(String).join(\" \");\n  }\n}\n\n// Time formatting\nTimeStep.FORMAT = {\n  minorLabels: {\n    millisecond: \"SSS\",\n    second: \"s\",\n    minute: \"HH:mm\",\n    hour: \"HH:mm\",\n    weekday: \"ddd D\",\n    day: \"D\",\n    week: \"w\",\n    month: \"MMM\",\n    year: \"YYYY\",\n  },\n  majorLabels: {\n    millisecond: \"HH:mm:ss\",\n    second: \"D MMMM HH:mm\",\n    minute: \"ddd D MMMM\",\n    hour: \"ddd D MMMM\",\n    weekday: \"MMMM YYYY\",\n    day: \"MMMM YYYY\",\n    week: \"MMMM YYYY\",\n    month: \"YYYY\",\n    year: \"\",\n  },\n};\n\nexport default TimeStep;\n", "import util from \"../../util.js\";\nimport Component from \"./Component.js\";\nimport TimeStep from \"../TimeStep.js\";\nimport * as DateUtil from \"../DateUtil.js\";\nimport moment from \"../../module/moment.js\";\n\n/** A horizontal time axis */\nclass TimeAxis extends Component {\n  /**\n   * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body\n   * @param {Object} [options]        See TimeAxis.setOptions for the available\n   *                                  options.\n   * @constructor TimeAxis\n   * @extends Component\n   */\n  constructor(body, options) {\n    super();\n    this.dom = {\n      foreground: null,\n      lines: [],\n      majorTexts: [],\n      minorTexts: [],\n      redundant: {\n        lines: [],\n        majorTexts: [],\n        minorTexts: [],\n      },\n    };\n    this.props = {\n      range: {\n        start: 0,\n        end: 0,\n        minimumStep: 0,\n      },\n      lineTop: 0,\n    };\n\n    this.defaultOptions = {\n      orientation: {\n        axis: \"bottom\",\n      }, // axis orientation: 'top' or 'bottom'\n      showMinorLabels: true,\n      showMajorLabels: true,\n      showWeekScale: false,\n      maxMinorChars: 7,\n      format: util.extend({}, TimeStep.FORMAT),\n      moment,\n      timeAxis: null,\n    };\n    this.options = util.extend({}, this.defaultOptions);\n\n    this.body = body;\n\n    // create the HTML DOM\n    this._create();\n\n    this.setOptions(options);\n  }\n\n  /**\n   * Set options for the TimeAxis.\n   * Parameters will be merged in current options.\n   * @param {Object} options  Available options:\n   *                          {string} [orientation.axis]\n   *                          {boolean} [showMinorLabels]\n   *                          {boolean} [showMajorLabels]\n   *                          {boolean} [showWeekScale]\n   */\n  setOptions(options) {\n    if (options) {\n      // copy all options that we know\n      util.selectiveExtend(\n        [\n          \"showMinorLabels\",\n          \"showMajorLabels\",\n          \"showWeekScale\",\n          \"maxMinorChars\",\n          \"hiddenDates\",\n          \"timeAxis\",\n          \"moment\",\n          \"rtl\",\n        ],\n        this.options,\n        options,\n      );\n\n      // deep copy the format options\n      util.selectiveDeepExtend([\"format\"], this.options, options);\n\n      if (\"orientation\" in options) {\n        if (typeof options.orientation === \"string\") {\n          this.options.orientation.axis = options.orientation;\n        } else if (\n          typeof options.orientation === \"object\" &&\n          \"axis\" in options.orientation\n        ) {\n          this.options.orientation.axis = options.orientation.axis;\n        }\n      }\n\n      // apply locale to moment.js\n      // TODO: not so nice, this is applied globally to moment.js\n      if (\"locale\" in options) {\n        if (typeof moment.locale === \"function\") {\n          // moment.js 2.8.1+\n          moment.locale(options.locale);\n        } else {\n          moment.lang(options.locale);\n        }\n      }\n    }\n  }\n\n  /**\n   * Create the HTML DOM for the TimeAxis\n   */\n  _create() {\n    this.dom.foreground = document.createElement(\"div\");\n    this.dom.background = document.createElement(\"div\");\n\n    this.dom.foreground.className = \"vis-time-axis vis-foreground\";\n    this.dom.background.className = \"vis-time-axis vis-background\";\n  }\n\n  /**\n   * Destroy the TimeAxis\n   */\n  destroy() {\n    // remove from DOM\n    if (this.dom.foreground.parentNode) {\n      this.dom.foreground.parentNode.removeChild(this.dom.foreground);\n    }\n    if (this.dom.background.parentNode) {\n      this.dom.background.parentNode.removeChild(this.dom.background);\n    }\n\n    this.body = null;\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    const props = this.props;\n    const foreground = this.dom.foreground;\n    const background = this.dom.background;\n\n    // determine the correct parent DOM element (depending on option orientation)\n    const parent =\n      this.options.orientation.axis == \"top\"\n        ? this.body.dom.top\n        : this.body.dom.bottom;\n    const parentChanged = foreground.parentNode !== parent;\n\n    // calculate character width and height\n    this._calculateCharSize();\n\n    // TODO: recalculate sizes only needed when parent is resized or options is changed\n    const showMinorLabels =\n      this.options.showMinorLabels && this.options.orientation.axis !== \"none\";\n    const showMajorLabels =\n      this.options.showMajorLabels && this.options.orientation.axis !== \"none\";\n\n    // determine the width and height of the elemens for the axis\n    props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;\n    props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;\n    props.height = props.minorLabelHeight + props.majorLabelHeight;\n    props.width = foreground.offsetWidth;\n\n    props.minorLineHeight =\n      this.body.domProps.root.height -\n      props.majorLabelHeight -\n      (this.options.orientation.axis == \"top\"\n        ? this.body.domProps.bottom.height\n        : this.body.domProps.top.height);\n    props.minorLineWidth = 1; // TODO: really calculate width\n    props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight;\n    props.majorLineWidth = 1; // TODO: really calculate width\n\n    //  take foreground and background offline while updating (is almost twice as fast)\n    const foregroundNextSibling = foreground.nextSibling;\n    const backgroundNextSibling = background.nextSibling;\n    foreground.parentNode && foreground.parentNode.removeChild(foreground);\n    background.parentNode && background.parentNode.removeChild(background);\n\n    foreground.style.height = `${this.props.height}px`;\n\n    this._repaintLabels();\n\n    // put DOM online again (at the same place)\n    if (foregroundNextSibling) {\n      parent.insertBefore(foreground, foregroundNextSibling);\n    } else {\n      parent.appendChild(foreground);\n    }\n    if (backgroundNextSibling) {\n      this.body.dom.backgroundVertical.insertBefore(\n        background,\n        backgroundNextSibling,\n      );\n    } else {\n      this.body.dom.backgroundVertical.appendChild(background);\n    }\n    return this._isResized() || parentChanged;\n  }\n\n  /**\n   * Repaint major and minor text labels and vertical grid lines\n   * @private\n   */\n  _repaintLabels() {\n    const orientation = this.options.orientation.axis;\n\n    // calculate range and step (step such that we have space for 7 characters per label)\n    const start = util.convert(this.body.range.start, \"Number\");\n    const end = util.convert(this.body.range.end, \"Number\");\n    const timeLabelsize = this.body.util\n      .toTime((this.props.minorCharWidth || 10) * this.options.maxMinorChars)\n      .valueOf();\n    let minimumStep =\n      timeLabelsize -\n      DateUtil.getHiddenDurationBefore(\n        this.options.moment,\n        this.body.hiddenDates,\n        this.body.range,\n        timeLabelsize,\n      );\n    minimumStep -= this.body.util.toTime(0).valueOf();\n\n    const step = new TimeStep(\n      new Date(start),\n      new Date(end),\n      minimumStep,\n      this.body.hiddenDates,\n      this.options,\n    );\n    step.setMoment(this.options.moment);\n    if (this.options.format) {\n      step.setFormat(this.options.format);\n    }\n    if (this.options.timeAxis) {\n      step.setScale(this.options.timeAxis);\n    }\n    this.step = step;\n\n    // Move all DOM elements to a \"redundant\" list, where they\n    // can be picked for re-use, and clear the lists with lines and texts.\n    // At the end of the function _repaintLabels, left over elements will be cleaned up\n    const dom = this.dom;\n    dom.redundant.lines = dom.lines;\n    dom.redundant.majorTexts = dom.majorTexts;\n    dom.redundant.minorTexts = dom.minorTexts;\n    dom.lines = [];\n    dom.majorTexts = [];\n    dom.minorTexts = [];\n\n    let current;\n    let next;\n    let x;\n    let xNext;\n    let isMajor;\n    let showMinorGrid;\n    let width = 0;\n    let prevWidth;\n    let line;\n    let xFirstMajorLabel = undefined;\n    let count = 0;\n    const MAX = 1000;\n    let className;\n\n    step.start();\n    next = step.getCurrent();\n    xNext = this.body.util.toScreen(next);\n    while (step.hasNext() && count < MAX) {\n      count++;\n\n      isMajor = step.isMajor();\n      className = step.getClassName();\n\n      current = next;\n      x = xNext;\n\n      step.next();\n      next = step.getCurrent();\n      xNext = this.body.util.toScreen(next);\n\n      prevWidth = width;\n      width = xNext - x;\n      switch (step.scale) {\n        case \"week\":\n          showMinorGrid = true;\n          break;\n        default:\n          showMinorGrid = width >= prevWidth * 0.4;\n          break; // prevent displaying of the 31th of the month on a scale of 5 days\n      }\n\n      if (this.options.showMinorLabels && showMinorGrid) {\n        var label = this._repaintMinorText(\n          x,\n          step.getLabelMinor(current),\n          orientation,\n          className,\n        );\n        label.style.width = `${width}px`; // set width to prevent overflow\n      }\n\n      if (isMajor && this.options.showMajorLabels) {\n        if (x > 0) {\n          if (xFirstMajorLabel == undefined) {\n            xFirstMajorLabel = x;\n          }\n          label = this._repaintMajorText(\n            x,\n            step.getLabelMajor(current),\n            orientation,\n            className,\n          );\n        }\n        line = this._repaintMajorLine(x, width, orientation, className);\n      } else {\n        // minor line\n        if (showMinorGrid) {\n          line = this._repaintMinorLine(x, width, orientation, className);\n        } else {\n          if (line) {\n            // adjust the width of the previous grid\n            line.style.width = `${parseInt(line.style.width) + width}px`;\n          }\n        }\n      }\n    }\n\n    if (count === MAX && !warnedForOverflow) {\n      console.warn(\n        `Something is wrong with the Timeline scale. Limited drawing of grid lines to ${MAX} lines.`,\n      );\n      warnedForOverflow = true;\n    }\n\n    // create a major label on the left when needed\n    if (this.options.showMajorLabels) {\n      const leftTime = this.body.util.toTime(0); // upper bound estimation\n      const leftText = step.getLabelMajor(leftTime);\n      const widthText =\n        leftText.length * (this.props.majorCharWidth || 10) + 10;\n\n      if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) {\n        this._repaintMajorText(0, leftText, orientation, className);\n      }\n    }\n\n    // Cleanup leftover DOM elements from the redundant list\n    util.forEach(this.dom.redundant, (arr) => {\n      while (arr.length) {\n        const elem = arr.pop();\n        if (elem && elem.parentNode) {\n          elem.parentNode.removeChild(elem);\n        }\n      }\n    });\n  }\n\n  /**\n   * Create a minor label for the axis at position x\n   * @param {number} x\n   * @param {string} text\n   * @param {string} orientation   \"top\" or \"bottom\" (default)\n   * @param {string} className\n   * @return {Element} Returns the HTML element of the created label\n   * @private\n   */\n  _repaintMinorText(x, text, orientation, className) {\n    // reuse redundant label\n    let label = this.dom.redundant.minorTexts.shift();\n\n    if (!label) {\n      // create new label\n      const content = document.createTextNode(\"\");\n      label = document.createElement(\"div\");\n      label.appendChild(content);\n      this.dom.foreground.appendChild(label);\n    }\n    this.dom.minorTexts.push(label);\n    label.innerHTML = util.xss(text);\n\n    let y = orientation == \"top\" ? this.props.majorLabelHeight : 0;\n    this._setXY(label, x, y);\n\n    label.className = `vis-text vis-minor ${className}`;\n    //label.title = title;  // TODO: this is a heavy operation\n\n    return label;\n  }\n\n  /**\n   * Create a Major label for the axis at position x\n   * @param {number} x\n   * @param {string} text\n   * @param {string} orientation   \"top\" or \"bottom\" (default)\n   * @param {string} className\n   * @return {Element} Returns the HTML element of the created label\n   * @private\n   */\n  _repaintMajorText(x, text, orientation, className) {\n    // reuse redundant label\n    let label = this.dom.redundant.majorTexts.shift();\n\n    if (!label) {\n      // create label\n      const content = document.createElement(\"div\");\n      label = document.createElement(\"div\");\n      label.appendChild(content);\n      this.dom.foreground.appendChild(label);\n    }\n\n    label.childNodes[0].innerHTML = util.xss(text);\n    label.className = `vis-text vis-major ${className}`;\n    //label.title = title; // TODO: this is a heavy operation\n\n    let y = orientation == \"top\" ? 0 : this.props.minorLabelHeight;\n    this._setXY(label, x, y);\n\n    this.dom.majorTexts.push(label);\n    return label;\n  }\n\n  /**\n   * sets xy\n   * @param {string} label\n   * @param {number} x\n   * @param {number} y\n   * @private\n   */\n  _setXY(label, x, y) {\n    // If rtl is true, inverse x.\n    const directionX = this.options.rtl ? x * -1 : x;\n    label.style.transform = `translate(${directionX}px, ${y}px)`;\n  }\n\n  /**\n   * Create a minor line for the axis at position x\n   * @param {number} left\n   * @param {number} width\n   * @param {string} orientation   \"top\" or \"bottom\" (default)\n   * @param {string} className\n   * @return {Element} Returns the created line\n   * @private\n   */\n  _repaintMinorLine(left, width, orientation, className) {\n    // reuse redundant line\n    let line = this.dom.redundant.lines.shift();\n    if (!line) {\n      // create vertical line\n      line = document.createElement(\"div\");\n      this.dom.background.appendChild(line);\n    }\n    this.dom.lines.push(line);\n\n    const props = this.props;\n\n    line.style.width = `${width}px`;\n    line.style.height = `${props.minorLineHeight}px`;\n\n    let y =\n      orientation == \"top\"\n        ? props.majorLabelHeight\n        : this.body.domProps.top.height;\n    let x = left - props.minorLineWidth / 2;\n\n    this._setXY(line, x, y);\n    line.className = `vis-grid ${this.options.rtl ? \"vis-vertical-rtl\" : \"vis-vertical\"} vis-minor ${className}`;\n\n    return line;\n  }\n\n  /**\n   * Create a Major line for the axis at position x\n   * @param {number} left\n   * @param {number} width\n   * @param {string} orientation   \"top\" or \"bottom\" (default)\n   * @param {string} className\n   * @return {Element} Returns the created line\n   * @private\n   */\n  _repaintMajorLine(left, width, orientation, className) {\n    // reuse redundant line\n    let line = this.dom.redundant.lines.shift();\n    if (!line) {\n      // create vertical line\n      line = document.createElement(\"div\");\n      this.dom.background.appendChild(line);\n    }\n    this.dom.lines.push(line);\n\n    const props = this.props;\n\n    line.style.width = `${width}px`;\n    line.style.height = `${props.majorLineHeight}px`;\n\n    let y = orientation == \"top\" ? 0 : this.body.domProps.top.height;\n    let x = left - props.majorLineWidth / 2;\n\n    this._setXY(line, x, y);\n    line.className = `vis-grid ${this.options.rtl ? \"vis-vertical-rtl\" : \"vis-vertical\"} vis-major ${className}`;\n\n    return line;\n  }\n\n  /**\n   * Determine the size of text on the axis (both major and minor axis).\n   * The size is calculated only once and then cached in this.props.\n   * @private\n   */\n  _calculateCharSize() {\n    // Note: We calculate char size with every redraw. Size may change, for\n    // example when any of the timelines parents had display:none for example.\n\n    // determine the char width and height on the minor axis\n    if (!this.dom.measureCharMinor) {\n      this.dom.measureCharMinor = document.createElement(\"DIV\");\n      this.dom.measureCharMinor.className = \"vis-text vis-minor vis-measure\";\n      this.dom.measureCharMinor.style.position = \"absolute\";\n\n      this.dom.measureCharMinor.appendChild(document.createTextNode(\"0\"));\n      this.dom.foreground.appendChild(this.dom.measureCharMinor);\n    }\n    this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight;\n    this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth;\n\n    // determine the char width and height on the major axis\n    if (!this.dom.measureCharMajor) {\n      this.dom.measureCharMajor = document.createElement(\"DIV\");\n      this.dom.measureCharMajor.className = \"vis-text vis-major vis-measure\";\n      this.dom.measureCharMajor.style.position = \"absolute\";\n\n      this.dom.measureCharMajor.appendChild(document.createTextNode(\"0\"));\n      this.dom.foreground.appendChild(this.dom.measureCharMajor);\n    }\n    this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight;\n    this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth;\n  }\n}\n\nvar warnedForOverflow = false;\n\nexport default TimeAxis;\n", "/**\r\n * Created by Alex on 11/6/2014.\r\n */\r\nexport default function keycharm(options) {\r\n  var preventDefault = options && options.preventDefault || false;\r\n\r\n  var container = options && options.container || window;\r\n\r\n  var _exportFunctions = {};\r\n  var _bound = {keydown:{}, keyup:{}};\r\n  var _keys = {};\r\n  var i;\r\n\r\n  // a - z\r\n  for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};}\r\n  // A - Z\r\n  for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};}\r\n  // 0 - 9\r\n  for (i = 0;  i <= 9;   i++) {_keys['' + i] = {code:48 + i, shift: false};}\r\n  // F1 - F12\r\n  for (i = 1;  i <= 12;   i++) {_keys['F' + i] = {code:111 + i, shift: false};}\r\n  // num0 - num9\r\n  for (i = 0;  i <= 9;   i++) {_keys['num' + i] = {code:96 + i, shift: false};}\r\n\r\n  // numpad misc\r\n  _keys['num*'] = {code:106, shift: false};\r\n  _keys['num+'] = {code:107, shift: false};\r\n  _keys['num-'] = {code:109, shift: false};\r\n  _keys['num/'] = {code:111, shift: false};\r\n  _keys['num.'] = {code:110, shift: false};\r\n  // arrows\r\n  _keys['left']  = {code:37, shift: false};\r\n  _keys['up']    = {code:38, shift: false};\r\n  _keys['right'] = {code:39, shift: false};\r\n  _keys['down']  = {code:40, shift: false};\r\n  // extra keys\r\n  _keys['space'] = {code:32, shift: false};\r\n  _keys['enter'] = {code:13, shift: false};\r\n  _keys['shift'] = {code:16, shift: undefined};\r\n  _keys['esc']   = {code:27, shift: false};\r\n  _keys['backspace'] = {code:8, shift: false};\r\n  _keys['tab']       = {code:9, shift: false};\r\n  _keys['ctrl']      = {code:17, shift: false};\r\n  _keys['alt']       = {code:18, shift: false};\r\n  _keys['delete']    = {code:46, shift: false};\r\n  _keys['pageup']    = {code:33, shift: false};\r\n  _keys['pagedown']  = {code:34, shift: false};\r\n  // symbols\r\n  _keys['=']     = {code:187, shift: false};\r\n  _keys['-']     = {code:189, shift: false};\r\n  _keys[']']     = {code:221, shift: false};\r\n  _keys['[']     = {code:219, shift: false};\r\n\r\n\r\n\r\n  var down = function(event) {handleEvent(event,'keydown');};\r\n  var up = function(event) {handleEvent(event,'keyup');};\r\n\r\n  // handle the actualy bound key with the event\r\n  var handleEvent = function(event,type) {\r\n    if (_bound[type][event.keyCode] !== undefined) {\r\n      var bound = _bound[type][event.keyCode];\r\n      for (var i = 0; i < bound.length; i++) {\r\n        if (bound[i].shift === undefined) {\r\n          bound[i].fn(event);\r\n        }\r\n        else if (bound[i].shift == true && event.shiftKey == true) {\r\n          bound[i].fn(event);\r\n        }\r\n        else if (bound[i].shift == false && event.shiftKey == false) {\r\n          bound[i].fn(event);\r\n        }\r\n      }\r\n\r\n      if (preventDefault == true) {\r\n        event.preventDefault();\r\n      }\r\n    }\r\n  };\r\n\r\n  // bind a key to a callback\r\n  _exportFunctions.bind = function(key, callback, type) {\r\n    if (type === undefined) {\r\n      type = 'keydown';\r\n    }\r\n    if (_keys[key] === undefined) {\r\n      throw new Error(\"unsupported key: \" + key);\r\n    }\r\n    if (_bound[type][_keys[key].code] === undefined) {\r\n      _bound[type][_keys[key].code] = [];\r\n    }\r\n    _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift});\r\n  };\r\n\r\n\r\n  // bind all keys to a call back (demo purposes)\r\n  _exportFunctions.bindAll = function(callback, type) {\r\n    if (type === undefined) {\r\n      type = 'keydown';\r\n    }\r\n    for (var key in _keys) {\r\n      if (_keys.hasOwnProperty(key)) {\r\n        _exportFunctions.bind(key,callback,type);\r\n      }\r\n    }\r\n  };\r\n\r\n  // get the key label from an event\r\n  _exportFunctions.getKey = function(event) {\r\n    for (var key in _keys) {\r\n      if (_keys.hasOwnProperty(key)) {\r\n        if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) {\r\n          return key;\r\n        }\r\n        else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) {\r\n          return key;\r\n        }\r\n        else if (event.keyCode == _keys[key].code && key == 'shift') {\r\n          return key;\r\n        }\r\n      }\r\n    }\r\n    return \"unknown key, currently not supported\";\r\n  };\r\n\r\n  // unbind either a specific callback from a key or all of them (by leaving callback undefined)\r\n  _exportFunctions.unbind = function(key, callback, type) {\r\n    if (type === undefined) {\r\n      type = 'keydown';\r\n    }\r\n    if (_keys[key] === undefined) {\r\n      throw new Error(\"unsupported key: \" + key);\r\n    }\r\n    if (callback !== undefined) {\r\n      var newBindings = [];\r\n      var bound = _bound[type][_keys[key].code];\r\n      if (bound !== undefined) {\r\n        for (var i = 0; i < bound.length; i++) {\r\n          if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) {\r\n            newBindings.push(_bound[type][_keys[key].code][i]);\r\n          }\r\n        }\r\n      }\r\n      _bound[type][_keys[key].code] = newBindings;\r\n    }\r\n    else {\r\n      _bound[type][_keys[key].code] = [];\r\n    }\r\n  };\r\n\r\n  // reset all bound variables.\r\n  _exportFunctions.reset = function() {\r\n    _bound = {keydown:{}, keyup:{}};\r\n  };\r\n\r\n  // unbind all listeners and reset all variables.\r\n  _exportFunctions.destroy = function() {\r\n    _bound = {keydown:{}, keyup:{}};\r\n    container.removeEventListener('keydown', down, true);\r\n    container.removeEventListener('keyup', up, true);\r\n  };\r\n\r\n  // create listeners.\r\n  container.addEventListener('keydown',down,true);\r\n  container.addEventListener('keyup',up,true);\r\n\r\n  // return the public functions.\r\n  return _exportFunctions;\r\n}\r\n", "import keycharm from \"keycharm\";\nimport Emitter from \"component-emitter\";\nimport Hammer from \"../module/hammer.js\";\nimport util from \"../util.js\";\n\n/**\n * Turn an element into an clickToUse element.\n * When not active, the element has a transparent overlay. When the overlay is\n * clicked, the mode is changed to active.\n * When active, the element is displayed with a blue border around it, and\n * the interactive contents of the element can be used. When clicked outside\n * the element, the elements mode is changed to inactive.\n * @param {Element} container\n * @constructor Activator\n */\nfunction Activator(container) {\n  this.active = false;\n\n  this.dom = {\n    container: container,\n  };\n\n  this.dom.overlay = document.createElement(\"div\");\n  this.dom.overlay.className = \"vis-overlay\";\n\n  this.dom.container.appendChild(this.dom.overlay);\n\n  this.hammer = Hammer(this.dom.overlay);\n  this.hammer.on(\"tap\", this._onTapOverlay.bind(this));\n\n  // block all touch events (except tap)\n  var me = this;\n  var events = [\n    \"tap\",\n    \"doubletap\",\n    \"press\",\n    \"pinch\",\n    \"pan\",\n    \"panstart\",\n    \"panmove\",\n    \"panend\",\n  ];\n  events.forEach(function (event) {\n    me.hammer.on(event, function (event) {\n      event.stopPropagation();\n    });\n  });\n\n  // attach a click event to the window, in order to deactivate when clicking outside the timeline\n  if (document && document.body) {\n    this.onClick = function (event) {\n      if (!_hasParent(event.target, container)) {\n        me.deactivate();\n      }\n    };\n    document.body.addEventListener(\"click\", this.onClick);\n  }\n\n  if (this.keycharm !== undefined) {\n    this.keycharm.destroy();\n  }\n  this.keycharm = keycharm();\n\n  // keycharm listener only bounded when active)\n  this.escListener = this.deactivate.bind(this);\n}\n\n// turn into an event emitter\nEmitter(Activator.prototype);\n\n// The currently active activator\nActivator.current = null;\n\n/**\n * Destroy the activator. Cleans up all created DOM and event listeners\n */\nActivator.prototype.destroy = function () {\n  this.deactivate();\n\n  // remove dom\n  this.dom.overlay.parentNode.removeChild(this.dom.overlay);\n\n  // remove global event listener\n  if (this.onClick) {\n    document.body.removeEventListener(\"click\", this.onClick);\n  }\n  // remove keycharm\n  if (this.keycharm !== undefined) {\n    this.keycharm.destroy();\n  }\n  this.keycharm = null;\n  // cleanup hammer instances\n  this.hammer.destroy();\n  this.hammer = null;\n  // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory)\n};\n\n/**\n * Activate the element\n * Overlay is hidden, element is decorated with a blue shadow border\n */\nActivator.prototype.activate = function () {\n  // we allow only one active activator at a time\n  if (Activator.current) {\n    Activator.current.deactivate();\n  }\n  Activator.current = this;\n\n  this.active = true;\n  this.dom.overlay.style.display = \"none\";\n  util.addClassName(this.dom.container, \"vis-active\");\n\n  this.emit(\"change\");\n  this.emit(\"activate\");\n\n  // ugly hack: bind ESC after emitting the events, as the Network rebinds all\n  // keyboard events on a 'change' event\n  this.keycharm.bind(\"esc\", this.escListener);\n};\n\n/**\n * Deactivate the element\n * Overlay is displayed on top of the element\n */\nActivator.prototype.deactivate = function () {\n  if (Activator.current === this) {\n    Activator.current = null;\n  }\n\n  this.active = false;\n  this.dom.overlay.style.display = \"\";\n  util.removeClassName(this.dom.container, \"vis-active\");\n  this.keycharm.unbind(\"esc\", this.escListener);\n\n  this.emit(\"change\");\n  this.emit(\"deactivate\");\n};\n\n/**\n * Handle a tap event: activate the container\n * @param {Event}  event   The event\n * @private\n */\nActivator.prototype._onTapOverlay = function (event) {\n  // activate the container\n  this.activate();\n  event.stopPropagation();\n};\n\n/**\n * Test whether the element has the requested parent element somewhere in\n * its chain of parent nodes.\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @returns {boolean} Returns true when the parent is found somewhere in the\n *                    chain of parent nodes.\n * @private\n */\nfunction _hasParent(element, parent) {\n  while (element) {\n    if (element === parent) {\n      return true;\n    }\n    element = element.parentNode;\n  }\n  return false;\n}\n\nexport default Activator;\n", "/*\n * IMPORTANT: Locales for Moment has to be imported in the legacy and standalone\n * entry points. For the peer build it's users responsibility to do so.\n */\n\n// English\nconst en = {\n  current: \"current\",\n  time: \"time\",\n  deleteSelected: \"Delete selected\",\n};\nconst en_EN = en;\nconst en_US = en;\n\n// Italiano\nconst it = {\n  current: \"attuale\",\n  time: \"tempo\",\n  deleteSelected: \"Cancella la selezione\",\n};\nconst it_IT = it;\nconst it_CH = it;\n\n// Dutch\nconst nl = {\n  current: \"huidige\",\n  time: \"tijd\",\n  deleteSelected: \"Selectie verwijderen\",\n};\nconst nl_NL = nl;\nconst nl_BE = nl;\n\n// German\nconst de = {\n  current: \"Aktuelle\",\n  time: \"Zeit\",\n  deleteSelected: \"L\\u00f6sche Auswahl\",\n};\nconst de_DE = de;\nconst de_CH = de;\n\n// French\nconst fr = {\n  current: \"actuel\",\n  time: \"heure\",\n  deleteSelected: \"Effacer la selection\",\n};\nconst fr_FR = fr;\nconst fr_CA = fr;\nconst fr_BE = fr;\nconst fr_CH = fr;\n\n// Espanol\nconst es = {\n  current: \"actual\",\n  time: \"hora\",\n  deleteSelected: \"Eliminar selecci\\u00f3n\",\n};\nconst es_ES = es;\n\n// Ukrainian\nconst uk = {\n  current: \"поточний\",\n  time: \"час\",\n  deleteSelected: \"Видалити обране\",\n};\nconst uk_UA = uk;\n\n// Russian\nconst ru = {\n  current: \"текущее\",\n  time: \"время\",\n  deleteSelected: \"Удалить выбранное\",\n};\nconst ru_RU = ru;\n\n// Polish\nconst pl = {\n  current: \"aktualny\",\n  time: \"czas\",\n  deleteSelected: \"Usuń wybrane\",\n};\nconst pl_PL = pl;\n\n// Portuguese\nconst pt = {\n  current: \"atual\",\n  time: \"data\",\n  deleteSelected: \"Apagar selecionado\",\n};\nconst pt_BR = pt;\nconst pt_PT = pt;\n\n// Turkish\nconst tr = {\n  current: \"güncel\",\n  time: \"zaman\",\n  deleteSelected: \"Seçileni sil\",\n};\nconst tr_TR = tr;\n\n// Japanese\nconst ja = {\n  current: \"現在\",\n  time: \"時刻\",\n  deleteSelected: \"選択されたものを削除\",\n};\nconst ja_JP = ja;\n\n// Swedish\nconst sv = {\n  current: \"nuvarande\",\n  time: \"tid\",\n  deleteSelected: \"Radera valda\",\n};\nconst sv_SE = sv;\n\n// Norwegian\nconst nb = {\n  current: \"nåværende\",\n  time: \"tid\",\n  deleteSelected: \"Slett valgte\",\n};\nconst nb_NO = nb;\nconst nn = nb;\nconst nn_NO = nb;\n\n// Lithuanian\nconst lt = {\n  current: \"einamas\",\n  time: \"laikas\",\n  deleteSelected: \"Pašalinti pasirinktą\",\n};\nconst lt_LT = lt;\n\nconst locales = {\n  en,\n  en_EN,\n  en_US,\n  it,\n  it_IT,\n  it_CH,\n  nl,\n  nl_NL,\n  nl_BE,\n  de,\n  de_DE,\n  de_CH,\n  fr,\n  fr_FR,\n  fr_CA,\n  fr_BE,\n  fr_CH,\n  es,\n  es_ES,\n  uk,\n  uk_UA,\n  ru,\n  ru_RU,\n  pl,\n  pl_PL,\n  pt,\n  pt_BR,\n  pt_PT,\n  tr,\n  tr_TR,\n  ja,\n  ja_JP,\n  lt,\n  lt_LT,\n  sv,\n  sv_SE,\n  nb,\n  nn,\n  nb_NO,\n  nn_NO,\n};\n\nexport default locales;\n", "import Hammer from \"../../module/hammer.js\";\nimport util from \"../../util.js\";\nimport Component from \"./Component.js\";\nimport moment from \"../../module/moment.js\";\nimport locales from \"../locales.js\";\n\n/** A custom time bar */\nclass CustomTime extends Component {\n  /**\n   * @param {{range: Range, dom: Object}} body\n   * @param {Object} [options]        Available parameters:\n   *                                  {number | string} id\n   *                                  {string} locales\n   *                                  {string} locale\n   * @constructor CustomTime\n   * @extends Component\n   */\n  constructor(body, options) {\n    super();\n    this.body = body;\n\n    // default options\n    this.defaultOptions = {\n      moment,\n      locales,\n      locale: \"en\",\n      id: undefined,\n      title: undefined,\n    };\n    this.options = util.extend({}, this.defaultOptions);\n    this.setOptions(options);\n    this.options.locales = util.extend({}, locales, this.options.locales);\n    const defaultLocales =\n      this.defaultOptions.locales[this.defaultOptions.locale];\n    Object.keys(this.options.locales).forEach((locale) => {\n      this.options.locales[locale] = util.extend(\n        {},\n        defaultLocales,\n        this.options.locales[locale],\n      );\n    });\n\n    if (options && options.time != null) {\n      this.customTime = options.time;\n    } else {\n      this.customTime = new Date();\n    }\n\n    this.eventParams = {}; // stores state parameters while dragging the bar\n\n    // create the DOM\n    this._create();\n  }\n\n  /**\n   * Set options for the component. Options will be merged in current options.\n   * @param {Object} options  Available parameters:\n   *                                  {number | string} id\n   *                                  {string} locales\n   *                                  {string} locale\n   */\n  setOptions(options) {\n    if (options) {\n      // copy all options that we know\n      util.selectiveExtend(\n        [\"moment\", \"locale\", \"locales\", \"id\", \"title\", \"rtl\", \"snap\"],\n        this.options,\n        options,\n      );\n    }\n  }\n\n  /**\n   * Create the DOM for the custom time\n   * @private\n   */\n  _create() {\n    const bar = document.createElement(\"div\");\n    bar[\"custom-time\"] = this;\n    bar.className = `vis-custom-time ${this.options.id || \"\"}`;\n    bar.style.position = \"absolute\";\n    bar.style.top = \"0px\";\n    bar.style.height = \"100%\";\n    this.bar = bar;\n\n    const drag = document.createElement(\"div\");\n    drag.style.position = \"relative\";\n    drag.style.top = \"0px\";\n    if (this.options.rtl) {\n      drag.style.right = \"-10px\";\n    } else {\n      drag.style.left = \"-10px\";\n    }\n    drag.style.height = \"100%\";\n    drag.style.width = \"20px\";\n\n    /**\n     *\n     * @param {WheelEvent} e\n     */\n    function onMouseWheel(e) {\n      this.body.range._onMouseWheel(e);\n    }\n\n    if (drag.addEventListener) {\n      // IE9, Chrome, Safari, Opera\n      drag.addEventListener(\"mousewheel\", onMouseWheel.bind(this), false);\n      // Firefox\n      drag.addEventListener(\"DOMMouseScroll\", onMouseWheel.bind(this), false);\n    } else {\n      // IE 6/7/8\n      drag.attachEvent(\"onmousewheel\", onMouseWheel.bind(this));\n    }\n\n    bar.appendChild(drag);\n    // attach event listeners\n    this.hammer = new Hammer(drag);\n    this.hammer.on(\"panstart\", this._onDragStart.bind(this));\n    this.hammer.on(\"panmove\", this._onDrag.bind(this));\n    this.hammer.on(\"panend\", this._onDragEnd.bind(this));\n    this.hammer\n      .get(\"pan\")\n      .set({ threshold: 5, direction: Hammer.DIRECTION_ALL });\n    // delay addition on item click for trackpads...\n    this.hammer.get(\"press\").set({ time: 10000 });\n  }\n\n  /**\n   * Destroy the CustomTime bar\n   */\n  destroy() {\n    this.hide();\n\n    this.hammer.destroy();\n    this.hammer = null;\n\n    this.body = null;\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    const parent = this.body.dom.backgroundVertical;\n    if (this.bar.parentNode != parent) {\n      // attach to the dom\n      if (this.bar.parentNode) {\n        this.bar.parentNode.removeChild(this.bar);\n      }\n      parent.appendChild(this.bar);\n    }\n\n    const x = this.body.util.toScreen(this.customTime);\n\n    let locale = this.options.locales[this.options.locale];\n    if (!locale) {\n      if (!this.warned) {\n        console.warn(\n          `WARNING: options.locales['${this.options.locale}'] not found. See https://visjs.github.io/vis-timeline/docs/timeline/#Localization`,\n        );\n        this.warned = true;\n      }\n      locale = this.options.locales[\"en\"]; // fall back on english when not available\n    }\n\n    let title = this.options.title;\n    // To hide the title completely use empty string ''.\n    if (title === undefined) {\n      title = `${locale.time}: ${this.options.moment(this.customTime).format(\"dddd, MMMM Do YYYY, H:mm:ss\")}`;\n      title = title.charAt(0).toUpperCase() + title.substring(1);\n    } else if (typeof title === \"function\") {\n      title = title.call(this, this.customTime);\n    }\n\n    this.options.rtl\n      ? (this.bar.style.right = `${x}px`)\n      : (this.bar.style.left = `${x}px`);\n    this.bar.title = title;\n\n    return false;\n  }\n\n  /**\n   * Remove the CustomTime from the DOM\n   */\n  hide() {\n    // remove the line from the DOM\n    if (this.bar.parentNode) {\n      this.bar.parentNode.removeChild(this.bar);\n    }\n  }\n\n  /**\n   * Set custom time.\n   * @param {Date | number | string} time\n   */\n  setCustomTime(time) {\n    this.customTime = util.convert(time, \"Date\");\n    this.redraw();\n  }\n\n  /**\n   * Retrieve the current custom time.\n   * @return {Date} customTime\n   */\n  getCustomTime() {\n    return new Date(this.customTime.valueOf());\n  }\n\n  /**\n   * Set custom marker.\n   * @param {string} [title] Title of the custom marker\n   * @param {boolean} [editable] Make the custom marker editable.\n   */\n  setCustomMarker(title, editable) {\n    if (this.marker) {\n      this.bar.removeChild(this.marker);\n    }\n    this.marker = document.createElement(\"div\");\n    this.marker.className = `vis-custom-time-marker`;\n    this.marker.innerHTML = util.xss(title);\n    this.marker.style.position = \"absolute\";\n\n    if (editable) {\n      this.marker.setAttribute(\"contenteditable\", \"true\");\n      this.marker.addEventListener(\"pointerdown\", () => {\n        this.marker.focus();\n      });\n      this.marker.addEventListener(\"input\", this._onMarkerChange.bind(this));\n      // The editable div element has no change event, so here emulates the change event.\n      this.marker.title = title;\n      this.marker.addEventListener(\"blur\", (event) => {\n        if (this.title != event.target.innerHTML) {\n          this._onMarkerChanged(event);\n          this.title = event.target.innerHTML;\n        }\n      });\n    }\n\n    this.bar.appendChild(this.marker);\n  }\n\n  /**\n   * Set custom title.\n   * @param {Date | number | string} title\n   */\n  setCustomTitle(title) {\n    this.options.title = title;\n  }\n\n  /**\n   * Start moving horizontally\n   * @param {Event} event\n   * @private\n   */\n  _onDragStart(event) {\n    this.eventParams.dragging = true;\n    this.eventParams.customTime = this.customTime;\n\n    event.stopPropagation();\n  }\n\n  /**\n   * Perform moving operating.\n   * @param {Event} event\n   * @private\n   */\n  _onDrag(event) {\n    if (!this.eventParams.dragging) return;\n\n    let deltaX = this.options.rtl ? -1 * event.deltaX : event.deltaX;\n\n    const x = this.body.util.toScreen(this.eventParams.customTime) + deltaX;\n    const time = this.body.util.toTime(x);\n\n    const scale = this.body.util.getScale();\n    const step = this.body.util.getStep();\n    const snap = this.options.snap;\n\n    const snappedTime = snap ? snap(time, scale, step) : time;\n\n    this.setCustomTime(snappedTime);\n\n    // fire a timechange event\n    this.body.emitter.emit(\"timechange\", {\n      id: this.options.id,\n      time: new Date(this.customTime.valueOf()),\n      event,\n    });\n\n    event.stopPropagation();\n  }\n\n  /**\n   * Stop moving operating.\n   * @param {Event} event\n   * @private\n   */\n  _onDragEnd(event) {\n    if (!this.eventParams.dragging) return;\n\n    // fire a timechanged event\n    this.body.emitter.emit(\"timechanged\", {\n      id: this.options.id,\n      time: new Date(this.customTime.valueOf()),\n      event,\n    });\n\n    event.stopPropagation();\n  }\n\n  /**\n   * Perform input operating.\n   * @param {Event} event\n   * @private\n   */\n  _onMarkerChange(event) {\n    this.body.emitter.emit(\"markerchange\", {\n      id: this.options.id,\n      title: event.target.innerHTML,\n      event,\n    });\n\n    event.stopPropagation();\n  }\n\n  /**\n   * Perform change operating.\n   * @param {Event} event\n   * @private\n   */\n  _onMarkerChanged(event) {\n    this.body.emitter.emit(\"markerchanged\", {\n      id: this.options.id,\n      title: event.target.innerHTML,\n      event,\n    });\n\n    event.stopPropagation();\n  }\n\n  /**\n   * Find a custom time from an event target:\n   * searches for the attribute 'custom-time' in the event target's element tree\n   * @param {Event} event\n   * @return {CustomTime | null} customTime\n   */\n  static customTimeFromTarget(event) {\n    let target = event.target;\n    while (target) {\n      if (Object.prototype.hasOwnProperty.call(target, \"custom-time\")) {\n        return target[\"custom-time\"];\n      }\n      target = target.parentNode;\n    }\n\n    return null;\n  }\n}\n\nexport default CustomTime;\n", "import Emitter from \"component-emitter\";\nimport Hammer from \"../module/hammer.js\";\nimport * as hammerUtil from \"../hammerUtil.js\";\nimport util from \"../util.js\";\nimport TimeAxis from \"./component/TimeAxis.js\";\nimport Activator from \"../shared/Activator.js\";\nimport * as DateUtil from \"./DateUtil.js\";\nimport CustomTime from \"./component/CustomTime.js\";\n\n/**\n * Create a timeline visualization\n * @constructor Core\n */\nclass Core {\n  /**\n   * Create the main DOM for the Core: a root panel containing left, right,\n   * top, bottom, content, and background panel.\n   * @param {Element} container  The container element where the Core will\n   *                             be attached.\n   * @protected\n   */\n  _create(container) {\n    this.dom = {};\n\n    this.dom.container = container;\n    this.dom.container.style.position = \"relative\";\n\n    this.dom.root = document.createElement(\"div\");\n    this.dom.background = document.createElement(\"div\");\n    this.dom.backgroundVertical = document.createElement(\"div\");\n    this.dom.backgroundHorizontal = document.createElement(\"div\");\n    this.dom.centerContainer = document.createElement(\"div\");\n    this.dom.leftContainer = document.createElement(\"div\");\n    this.dom.rightContainer = document.createElement(\"div\");\n    this.dom.center = document.createElement(\"div\");\n    this.dom.left = document.createElement(\"div\");\n    this.dom.right = document.createElement(\"div\");\n    this.dom.top = document.createElement(\"div\");\n    this.dom.bottom = document.createElement(\"div\");\n    this.dom.shadowTop = document.createElement(\"div\");\n    this.dom.shadowBottom = document.createElement(\"div\");\n    this.dom.shadowTopLeft = document.createElement(\"div\");\n    this.dom.shadowBottomLeft = document.createElement(\"div\");\n    this.dom.shadowTopRight = document.createElement(\"div\");\n    this.dom.shadowBottomRight = document.createElement(\"div\");\n    this.dom.rollingModeBtn = document.createElement(\"div\");\n    this.dom.loadingScreen = document.createElement(\"div\");\n\n    this.dom.root.className = \"vis-timeline\";\n    this.dom.background.className = \"vis-panel vis-background\";\n    this.dom.backgroundVertical.className =\n      \"vis-panel vis-background vis-vertical\";\n    this.dom.backgroundHorizontal.className =\n      \"vis-panel vis-background vis-horizontal\";\n    this.dom.centerContainer.className = \"vis-panel vis-center\";\n    this.dom.leftContainer.className = \"vis-panel vis-left\";\n    this.dom.rightContainer.className = \"vis-panel vis-right\";\n    this.dom.top.className = \"vis-panel vis-top\";\n    this.dom.bottom.className = \"vis-panel vis-bottom\";\n    this.dom.left.className = \"vis-content\";\n    this.dom.center.className = \"vis-content\";\n    this.dom.right.className = \"vis-content\";\n    this.dom.shadowTop.className = \"vis-shadow vis-top\";\n    this.dom.shadowBottom.className = \"vis-shadow vis-bottom\";\n    this.dom.shadowTopLeft.className = \"vis-shadow vis-top\";\n    this.dom.shadowBottomLeft.className = \"vis-shadow vis-bottom\";\n    this.dom.shadowTopRight.className = \"vis-shadow vis-top\";\n    this.dom.shadowBottomRight.className = \"vis-shadow vis-bottom\";\n    this.dom.rollingModeBtn.className = \"vis-rolling-mode-btn\";\n    this.dom.loadingScreen.className = \"vis-loading-screen\";\n\n    this.dom.root.appendChild(this.dom.background);\n    this.dom.root.appendChild(this.dom.backgroundVertical);\n    this.dom.root.appendChild(this.dom.backgroundHorizontal);\n    this.dom.root.appendChild(this.dom.centerContainer);\n    this.dom.root.appendChild(this.dom.leftContainer);\n    this.dom.root.appendChild(this.dom.rightContainer);\n    this.dom.root.appendChild(this.dom.top);\n    this.dom.root.appendChild(this.dom.bottom);\n    this.dom.root.appendChild(this.dom.rollingModeBtn);\n\n    this.dom.centerContainer.appendChild(this.dom.center);\n    this.dom.leftContainer.appendChild(this.dom.left);\n    this.dom.rightContainer.appendChild(this.dom.right);\n    this.dom.centerContainer.appendChild(this.dom.shadowTop);\n    this.dom.centerContainer.appendChild(this.dom.shadowBottom);\n    this.dom.leftContainer.appendChild(this.dom.shadowTopLeft);\n    this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft);\n    this.dom.rightContainer.appendChild(this.dom.shadowTopRight);\n    this.dom.rightContainer.appendChild(this.dom.shadowBottomRight);\n\n    // size properties of each of the panels\n    this.props = {\n      root: {},\n      background: {},\n      centerContainer: {},\n      leftContainer: {},\n      rightContainer: {},\n      center: {},\n      left: {},\n      right: {},\n      top: {},\n      bottom: {},\n      border: {},\n      scrollTop: 0,\n      scrollTopMin: 0,\n    };\n\n    this.on(\"rangechange\", () => {\n      if (this.initialDrawDone === true) {\n        this._redraw();\n      }\n    });\n    this.on(\"rangechanged\", () => {\n      if (!this.initialRangeChangeDone) {\n        this.initialRangeChangeDone = true;\n      }\n    });\n    this.on(\"touch\", this._onTouch.bind(this));\n    this.on(\"panmove\", this._onDrag.bind(this));\n\n    const me = this;\n    this._origRedraw = this._redraw.bind(this);\n    this._redraw = util.throttle(this._origRedraw);\n\n    this.on(\"_change\", (properties) => {\n      if (\n        me.itemSet &&\n        me.itemSet.initialItemSetDrawn &&\n        properties &&\n        properties.queue == true\n      ) {\n        me._redraw();\n      } else {\n        me._origRedraw();\n      }\n    });\n\n    // create event listeners for all interesting events, these events will be\n    // emitted via emitter\n    this.hammer = new Hammer(this.dom.root);\n    const pinchRecognizer = this.hammer.get(\"pinch\").set({ enable: true });\n    pinchRecognizer &&\n      hammerUtil.disablePreventDefaultVertically(pinchRecognizer);\n    this.hammer\n      .get(\"pan\")\n      .set({ threshold: 5, direction: Hammer.DIRECTION_ALL });\n    this.timelineListeners = {};\n\n    const events = [\n      \"tap\",\n      \"doubletap\",\n      \"press\",\n      \"pinch\",\n      \"pan\",\n      \"panstart\",\n      \"panmove\",\n      \"panend\",\n      // TODO: cleanup\n      //'touch', 'pinch',\n      //'tap', 'doubletap', 'hold',\n      //'dragstart', 'drag', 'dragend',\n      //'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox\n    ];\n    events.forEach((type) => {\n      const listener = (event) => {\n        if (me.isActive()) {\n          me.emit(type, event);\n        }\n      };\n      me.hammer.on(type, listener);\n      me.timelineListeners[type] = listener;\n    });\n\n    // emulate a touch event (emitted before the start of a pan, pinch, tap, or press)\n    hammerUtil.onTouch(this.hammer, (event) => {\n      me.emit(\"touch\", event);\n    });\n\n    // emulate a release event (emitted after a pan, pinch, tap, or press)\n    hammerUtil.onRelease(this.hammer, (event) => {\n      me.emit(\"release\", event);\n    });\n\n    /**\n     *\n     * @param {WheelEvent} event\n     */\n    function onMouseWheel(event) {\n      // Only allow scroll-wheel interaction if timeline is active and clickToUse is set to true.\n      if (!this.isActive()) return;\n\n      this.emit(\"mousewheel\", event);\n\n      // Prevent scrolling when zooming (no zoom key, or pressing zoom key)\n      if (this.options.preferZoom) {\n        // Return if key not configured OR is currently pressed (zoom only).\n        // TODO: Possible Bug: Should it not be the inverse behaviour? Aka. if pressed should allow user to scroll?\n        if (!this.options.zoomKey || event[this.options.zoomKey]) return;\n      } else {\n        // Return if key configured AND currently pressed\n        if (this.options.zoomKey && event[this.options.zoomKey]) return;\n      }\n\n      // Don't preventDefault if you can't scroll\n      if (!this.options.verticalScroll && !this.options.horizontalScroll)\n        return;\n\n      // deltaX and deltaY normalization from jquery.mousewheel.js\n      let deltaX = 0;\n      let deltaY = 0;\n\n      // Old school scrollwheel delta\n      if (\"detail\" in event) deltaY = event.detail * -1;\n      if (\"wheelDelta\" in event) deltaY = event.wheelDelta;\n      if (\"wheelDeltaY\" in event) deltaY = event.wheelDeltaY;\n      if (\"wheelDeltaX\" in event) deltaX = event.wheelDeltaX * -1;\n\n      // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n      if (\"axis\" in event && event.axis === event.HORIZONTAL_AXIS) {\n        deltaX = deltaY * -1;\n        deltaY = 0;\n      }\n\n      // New school wheel delta (wheel event)\n      if (\"deltaY\" in event) {\n        deltaY = event.deltaY * -1;\n      }\n      if (\"deltaX\" in event) {\n        deltaX = event.deltaX;\n      }\n\n      // Reasonable default wheel deltas\n      var LINE_HEIGHT = 40;\n      var PAGE_HEIGHT = 800;\n\n      // Normalize deltas\n      if (event.deltaMode) {\n        if (event.deltaMode === 1) {\n          // delta in LINE units\n          deltaX *= LINE_HEIGHT;\n          deltaY *= LINE_HEIGHT;\n        } else {\n          // delta in PAGE units\n          deltaX *= LINE_HEIGHT;\n          deltaY *= PAGE_HEIGHT;\n        }\n      }\n\n      // Vertical scroll preferred unless 'horizontalScrollKey' is configured and currently pressed.\n      const isVerticalScrollingPreferred = this.options.verticalScroll;\n      const isCurrentlyScrollingWithVerticalScrollWheel =\n        Math.abs(deltaY) >= Math.abs(deltaX);\n      const isHorizontalScrollKeyConfiguredAndPressed =\n        this.options.horizontalScroll &&\n        this.options.horizontalScrollKey &&\n        event[this.options.horizontalScrollKey];\n      if (\n        isVerticalScrollingPreferred &&\n        isCurrentlyScrollingWithVerticalScrollWheel &&\n        !isHorizontalScrollKeyConfiguredAndPressed\n      ) {\n        const current = this.props.scrollTop;\n        const adjusted = current + deltaY;\n\n        const newScrollTop = this._setScrollTop(adjusted);\n        if (newScrollTop !== current) {\n          this._redraw();\n          this.emit(\"scroll\", event);\n\n          // Prevent default actions caused by mouse wheel\n          // (else the page and timeline both scroll)\n          event.preventDefault();\n        }\n\n        return;\n      }\n\n      // If option 'verticalScroll' disabled or 'horizontalScroll' is configured\n      if (this.options.horizontalScroll) {\n        this.range.stopRolling();\n\n        // Depending on the mouse wheel used chose the delta (some mice have the hardware for both)\n        const delta = isCurrentlyScrollingWithVerticalScrollWheel\n          ? deltaY\n          : deltaX;\n\n        // Calculate a single scroll jump relative to the range scale\n        let diff = ((delta / 120) * (this.range.end - this.range.start)) / 20;\n\n        // Invert scroll direction\n        //  ...unless the user uses a horizontal mouse-wheel as found on the \"Logi Master\" series.\n        // In other words only invert the direction when a vertical scroll-wheel is used.\n        // Reason: Usually the user controls this behaviour via the driver software and it isn't linked to the vertical-scroll behaviour.\n        if (\n          this.options.horizontalScrollInvert &&\n          isCurrentlyScrollingWithVerticalScrollWheel\n        )\n          diff = -diff;\n\n        // calculate new start and end\n        const newStart = this.range.start + diff;\n        const newEnd = this.range.end + diff;\n        const options = {\n          animation: false,\n          byUser: true,\n          event: event,\n        };\n        this.range.setRange(newStart, newEnd, options);\n\n        event.preventDefault();\n\n        // Here in case of any future behaviour following after\n        return;\n      }\n    }\n\n    // Add modern wheel event listener\n    const wheelType =\n      \"onwheel\" in document.createElement(\"div\")\n        ? \"wheel\" // Modern browsers support \"wheel\"\n        : document.onmousewheel !== undefined\n          ? \"mousewheel\" // Webkit and IE support at least \"mousewheel\"\n          : // DOMMouseScroll - Older Firefox versions use \"DOMMouseScroll\"\n            // onmousewheel - All the use \"onmousewheel\"\n            this.dom.centerContainer.addEventListener\n            ? \"DOMMouseScroll\"\n            : \"onmousewheel\";\n    this.dom.top.addEventListener ? \"DOMMouseScroll\" : \"onmousewheel\";\n    this.dom.bottom.addEventListener ? \"DOMMouseScroll\" : \"onmousewheel\";\n    this.dom.centerContainer.addEventListener(\n      wheelType,\n      onMouseWheel.bind(this),\n      false,\n    );\n    this.dom.top.addEventListener(wheelType, onMouseWheel.bind(this), false);\n    this.dom.bottom.addEventListener(wheelType, onMouseWheel.bind(this), false);\n\n    /**\n     *\n     * @param {scroll} event\n     */\n    function onMouseScrollSide(event) {\n      if (!me.options.verticalScroll) return;\n\n      event.preventDefault();\n      if (me.isActive()) {\n        const adjusted = -event.target.scrollTop;\n        me._setScrollTop(adjusted);\n        me._redraw();\n        me.emit(\"scrollSide\", event);\n      }\n    }\n\n    this.dom.left.parentNode.addEventListener(\n      \"scroll\",\n      onMouseScrollSide.bind(this),\n    );\n    this.dom.right.parentNode.addEventListener(\n      \"scroll\",\n      onMouseScrollSide.bind(this),\n    );\n\n    let itemAddedToTimeline = false;\n\n    /**\n     *\n     * @param {dragover} event\n     * @returns {boolean}\n     */\n    function handleDragOver(event) {\n      if (event.preventDefault) {\n        me.emit(\"dragover\", me.getEventProperties(event));\n        event.preventDefault(); // Necessary. Allows us to drop.\n      }\n\n      // make sure your target is a timeline element\n      if (!(event.target.className.indexOf(\"timeline\") > -1)) return;\n\n      // make sure only one item is added every time you're over the timeline\n      if (itemAddedToTimeline) return;\n\n      event.dataTransfer.dropEffect = \"move\";\n      itemAddedToTimeline = true;\n      return false;\n    }\n\n    /**\n     *\n     * @param {drop} event\n     * @returns {boolean}\n     */\n    function handleDrop(event) {\n      // prevent redirect to blank page - Firefox\n      if (event.preventDefault) {\n        event.preventDefault();\n      }\n      if (event.stopPropagation) {\n        event.stopPropagation();\n      }\n      // return when dropping non-timeline items\n      try {\n        var itemData = JSON.parse(event.dataTransfer.getData(\"text\"));\n        if (!itemData || !itemData.content) return;\n      } catch (err) {\n        return false;\n      }\n\n      itemAddedToTimeline = false;\n      event.center = {\n        x: event.clientX,\n        y: event.clientY,\n      };\n\n      if (itemData.target !== \"item\") {\n        me.itemSet._onAddItem(event);\n      } else {\n        me.itemSet._onDropObjectOnItem(event);\n      }\n      me.emit(\"drop\", me.getEventProperties(event));\n      return false;\n    }\n\n    this.dom.center.addEventListener(\n      \"dragover\",\n      handleDragOver.bind(this),\n      false,\n    );\n    this.dom.center.addEventListener(\"drop\", handleDrop.bind(this), false);\n\n    this.customTimes = [];\n\n    // store state information needed for touch events\n    this.touch = {};\n\n    this.redrawCount = 0;\n    this.initialDrawDone = false;\n    this.initialRangeChangeDone = false;\n\n    // attach the root panel to the provided container\n    if (!container) throw new Error(\"No container provided\");\n    container.appendChild(this.dom.root);\n    container.appendChild(this.dom.loadingScreen);\n  }\n\n  /**\n   * Set options. Options will be passed to all components loaded in the Timeline.\n   * @param {Object} [options]\n   *                           {String} orientation\n   *                              Vertical orientation for the Timeline,\n   *                              can be 'bottom' (default) or 'top'.\n   *                           {string | number} width\n   *                              Width for the timeline, a number in pixels or\n   *                              a css string like '1000px' or '75%'. '100%' by default.\n   *                           {string | number} height\n   *                              Fixed height for the Timeline, a number in pixels or\n   *                              a css string like '400px' or '75%'. If undefined,\n   *                              The Timeline will automatically size such that\n   *                              its contents fit.\n   *                           {string | number} minHeight\n   *                              Minimum height for the Timeline, a number in pixels or\n   *                              a css string like '400px' or '75%'.\n   *                           {string | number} maxHeight\n   *                              Maximum height for the Timeline, a number in pixels or\n   *                              a css string like '400px' or '75%'.\n   *                           {number | Date | string} start\n   *                              Start date for the visible window\n   *                           {number | Date | string} end\n   *                              End date for the visible window\n   */\n  setOptions(options) {\n    if (options) {\n      // copy the known options\n      const fields = [\n        \"width\",\n        \"height\",\n        \"minHeight\",\n        \"maxHeight\",\n        \"autoResize\",\n        \"start\",\n        \"end\",\n        \"clickToUse\",\n        \"dataAttributes\",\n        \"hiddenDates\",\n        \"locale\",\n        \"locales\",\n        \"moment\",\n        \"preferZoom\",\n        \"rtl\",\n        \"zoomKey\",\n        \"horizontalScroll\",\n        \"horizontalScrollKey\",\n        \"horizontalScrollInvert\",\n        \"verticalScroll\",\n        \"longSelectPressTime\",\n        \"snap\",\n      ];\n      util.selectiveExtend(fields, this.options, options);\n      this.dom.rollingModeBtn.style.visibility = \"hidden\";\n\n      if (this.options.rtl) {\n        this.dom.container.style.direction = \"rtl\";\n        this.dom.backgroundVertical.className =\n          \"vis-panel vis-background vis-vertical-rtl\";\n      }\n\n      if (this.options.verticalScroll) {\n        if (this.options.rtl) {\n          this.dom.rightContainer.className =\n            \"vis-panel vis-right vis-vertical-scroll\";\n        } else {\n          this.dom.leftContainer.className =\n            \"vis-panel vis-left vis-vertical-scroll\";\n        }\n      }\n\n      if (typeof this.options.orientation !== \"object\") {\n        this.options.orientation = { item: undefined, axis: undefined };\n      }\n      if (\"orientation\" in options) {\n        if (typeof options.orientation === \"string\") {\n          this.options.orientation = {\n            item: options.orientation,\n            axis: options.orientation,\n          };\n        } else if (typeof options.orientation === \"object\") {\n          if (\"item\" in options.orientation) {\n            this.options.orientation.item = options.orientation.item;\n          }\n          if (\"axis\" in options.orientation) {\n            this.options.orientation.axis = options.orientation.axis;\n          }\n        }\n      }\n\n      if (this.options.orientation.axis === \"both\") {\n        if (!this.timeAxis2) {\n          const timeAxis2 = (this.timeAxis2 = new TimeAxis(\n            this.body,\n            this.options,\n          ));\n          timeAxis2.setOptions = (options) => {\n            const _options = options ? util.extend({}, options) : {};\n            _options.orientation = \"top\"; // override the orientation option, always top\n            TimeAxis.prototype.setOptions.call(timeAxis2, _options);\n          };\n          this.components.push(timeAxis2);\n        }\n      } else {\n        if (this.timeAxis2) {\n          const index = this.components.indexOf(this.timeAxis2);\n          if (index !== -1) {\n            this.components.splice(index, 1);\n          }\n          this.timeAxis2.destroy();\n          this.timeAxis2 = null;\n        }\n      }\n\n      // if the graph2d's drawPoints is a function delegate the callback to the onRender property\n      if (typeof options.drawPoints == \"function\") {\n        options.drawPoints = {\n          onRender: options.drawPoints,\n        };\n      }\n\n      if (\"hiddenDates\" in this.options) {\n        DateUtil.convertHiddenOptions(\n          this.options.moment,\n          this.body,\n          this.options.hiddenDates,\n        );\n      }\n\n      if (\"clickToUse\" in options) {\n        if (options.clickToUse) {\n          if (!this.activator) {\n            this.activator = new Activator(this.dom.root);\n          }\n        } else {\n          if (this.activator) {\n            this.activator.destroy();\n            delete this.activator;\n          }\n        }\n      }\n\n      // enable/disable autoResize\n      this._initAutoResize();\n    }\n\n    // propagate options to all components\n    this.components.forEach((component) => component.setOptions(options));\n\n    // enable/disable configure\n    if (\"configure\" in options) {\n      if (!this.configurator) {\n        this.configurator = this._createConfigurator();\n      }\n\n      this.configurator.setOptions(options.configure);\n\n      // collect the settings of all components, and pass them to the configuration system\n      const appliedOptions = util.deepExtend({}, this.options);\n      this.components.forEach((component) => {\n        util.deepExtend(appliedOptions, component.options);\n      });\n      this.configurator.setModuleOptions({ global: appliedOptions });\n    }\n\n    this._redraw();\n  }\n\n  /**\n   * Returns true when the Timeline is active.\n   * @returns {boolean}\n   */\n  isActive() {\n    return !this.activator || this.activator.active;\n  }\n\n  /**\n   * Destroy the Core, clean up all DOM elements and event listeners.\n   */\n  destroy() {\n    // unbind datasets\n    this.setItems(null);\n    this.setGroups(null);\n\n    // remove all event listeners\n    this.off();\n\n    // stop checking for changed size\n    this._stopAutoResize();\n\n    // remove from DOM\n    if (this.dom.root.parentNode) {\n      this.dom.root.parentNode.removeChild(this.dom.root);\n    }\n    this.dom = null;\n\n    // remove Activator\n    if (this.activator) {\n      this.activator.destroy();\n      delete this.activator;\n    }\n\n    // cleanup hammer touch events\n    for (const event in this.timelineListeners) {\n      if (Object.prototype.hasOwnProperty.call(this.timelineListeners, event)) {\n        delete this.timelineListeners[event];\n      }\n    }\n    this.timelineListeners = null;\n    this.hammer && this.hammer.destroy();\n    this.hammer = null;\n\n    // give all components the opportunity to cleanup\n    this.components.forEach((component) => component.destroy());\n\n    this.body = null;\n  }\n\n  /**\n   * Set a custom time bar\n   * @param {Date} time\n   * @param {number} [id=undefined] Optional id of the custom time bar to be adjusted.\n   */\n  setCustomTime(time, id) {\n    const customTimes = this.customTimes.filter(\n      (component) => id === component.options.id,\n    );\n\n    if (customTimes.length === 0) {\n      throw new Error(`No custom time bar found with id ${JSON.stringify(id)}`);\n    }\n\n    if (customTimes.length > 0) {\n      customTimes[0].setCustomTime(time);\n    }\n  }\n\n  /**\n   * Retrieve the current custom time.\n   * @param {number} [id=undefined]    Id of the custom time bar.\n   * @return {Date | undefined} customTime\n   */\n  getCustomTime(id) {\n    const customTimes = this.customTimes.filter(\n      (component) => component.options.id === id,\n    );\n\n    if (customTimes.length === 0) {\n      throw new Error(`No custom time bar found with id ${JSON.stringify(id)}`);\n    }\n    return customTimes[0].getCustomTime();\n  }\n\n  /**\n   * Set a custom marker for the custom time bar.\n   * @param {string} [title] Title of the custom marker.\n   * @param {number} [id=undefined] Id of the custom marker.\n   * @param {boolean} [editable=false] Make the custom marker editable.\n   */\n  setCustomTimeMarker(title, id, editable) {\n    const customTimes = this.customTimes.filter(\n      (component) => component.options.id === id,\n    );\n\n    if (customTimes.length === 0) {\n      throw new Error(`No custom time bar found with id ${JSON.stringify(id)}`);\n    }\n    if (customTimes.length > 0) {\n      customTimes[0].setCustomMarker(title, editable);\n    }\n  }\n\n  /**\n   * Set a custom title for the custom time bar.\n   * @param {string} [title] Custom title\n   * @param {number} [id=undefined]    Id of the custom time bar.\n   * @returns {*}\n   */\n  setCustomTimeTitle(title, id) {\n    const customTimes = this.customTimes.filter(\n      (component) => component.options.id === id,\n    );\n\n    if (customTimes.length === 0) {\n      throw new Error(`No custom time bar found with id ${JSON.stringify(id)}`);\n    }\n    if (customTimes.length > 0) {\n      return customTimes[0].setCustomTitle(title);\n    }\n  }\n\n  /**\n   * Retrieve meta information from an event.\n   * Should be overridden by classes extending Core\n   * @param {Event} event\n   * @return {Object} An object with related information.\n   */\n  getEventProperties(event) {\n    return { event };\n  }\n\n  /**\n   * Add custom vertical bar\n   * @param {Date | string | number} [time]  A Date, unix timestamp, or\n   *                                         ISO date string. Time point where\n   *                                         the new bar should be placed.\n   *                                         If not provided, `new Date()` will\n   *                                         be used.\n   * @param {number | string} [id=undefined] Id of the new bar. Optional\n   * @return {number | string}               Returns the id of the new bar\n   */\n  addCustomTime(time, id) {\n    const timestamp =\n      time !== undefined ? util.convert(time, \"Date\") : new Date();\n\n    const exists = this.customTimes.some(\n      (customTime) => customTime.options.id === id,\n    );\n    if (exists) {\n      throw new Error(\n        `A custom time with id ${JSON.stringify(id)} already exists`,\n      );\n    }\n\n    const customTime = new CustomTime(\n      this.body,\n      util.extend({}, this.options, {\n        time: timestamp,\n        id,\n        snap: this.itemSet ? this.itemSet.options.snap : this.options.snap,\n      }),\n    );\n\n    this.customTimes.push(customTime);\n    this.components.push(customTime);\n    this._redraw();\n\n    return id;\n  }\n\n  /**\n   * Remove previously added custom bar\n   * @param {int} id ID of the custom bar to be removed\n   * [at]returns {boolean} True if the bar exists and is removed, false otherwise\n   */\n  removeCustomTime(id) {\n    const customTimes = this.customTimes.filter((bar) => bar.options.id === id);\n\n    if (customTimes.length === 0) {\n      throw new Error(`No custom time bar found with id ${JSON.stringify(id)}`);\n    }\n\n    customTimes.forEach((customTime) => {\n      this.customTimes.splice(this.customTimes.indexOf(customTime), 1);\n      this.components.splice(this.components.indexOf(customTime), 1);\n      customTime.destroy();\n    });\n  }\n\n  /**\n   * Get the id's of the currently visible items.\n   * @returns {Array} The ids of the visible items\n   */\n  getVisibleItems() {\n    return (this.itemSet && this.itemSet.getVisibleItems()) || [];\n  }\n\n  /**\n   * Get the id's of the items at specific time, where a click takes place on the timeline.\n   * @param {Date} timeOfEvent The point in time to query items.\n   * @returns {Array} The ids of all items in existence at the time of event.\n   */\n  getItemsAtCurrentTime(timeOfEvent) {\n    this.time = timeOfEvent;\n    return (\n      (this.itemSet && this.itemSet.getItemsAtCurrentTime(this.time)) || []\n    );\n  }\n\n  /**\n   * Get the id's of the currently visible groups.\n   * @returns {Array} The ids of the visible groups\n   */\n  getVisibleGroups() {\n    return (this.itemSet && this.itemSet.getVisibleGroups()) || [];\n  }\n\n  /**\n   * Set Core window such that it fits all items\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback] a callback funtion to be executed at the end of this function\n   */\n  fit(options, callback) {\n    const range = this.getDataRange();\n\n    // skip range set if there is no min and max date\n    if (range.min === null && range.max === null) {\n      return;\n    }\n\n    // apply a margin of 1% left and right of the data\n    const interval = range.max - range.min;\n    const min = new Date(range.min.valueOf() - interval * 0.01);\n    const max = new Date(range.max.valueOf() + interval * 0.01);\n    const animation =\n      options && options.animation !== undefined ? options.animation : true;\n    this.range.setRange(min, max, { animation }, callback);\n  }\n\n  /**\n   * Calculate the data range of the items start and end dates\n   * [at]returns {{min: [Date], max: [Date]}}\n   * @protected\n   */\n  getDataRange() {\n    // must be implemented by Timeline and Graph2d\n    throw new Error(\"Cannot invoke abstract method getDataRange\");\n  }\n\n  /**\n   * Set the visible window. Both parameters are optional, you can change only\n   * start or only end. Syntax:\n   *\n   *     TimeLine.setWindow(start, end)\n   *     TimeLine.setWindow(start, end, options)\n   *     TimeLine.setWindow(range)\n   *\n   * Where start and end can be a Date, number, or string, and range is an\n   * object with properties start and end.\n   *\n   * @param {Date | number | string | Object} [start] Start date of visible window\n   * @param {Date | number | string} [end]            End date of visible window\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback] a callback funtion to be executed at the end of this function\n   */\n  setWindow(start, end, options, callback) {\n    if (typeof arguments[2] == \"function\") {\n      callback = arguments[2];\n      options = {};\n    }\n    let animation;\n    let range;\n    if (arguments.length == 1) {\n      range = arguments[0];\n      animation = range.animation !== undefined ? range.animation : true;\n      this.range.setRange(range.start, range.end, { animation });\n    } else if (arguments.length == 2 && typeof arguments[1] == \"function\") {\n      range = arguments[0];\n      callback = arguments[1];\n      animation = range.animation !== undefined ? range.animation : true;\n      this.range.setRange(range.start, range.end, { animation }, callback);\n    } else {\n      animation =\n        options && options.animation !== undefined ? options.animation : true;\n      this.range.setRange(start, end, { animation }, callback);\n    }\n  }\n\n  /**\n   * Move the window such that given time is centered on screen.\n   * @param {Date | number | string} time\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback] a callback funtion to be executed at the end of this function\n   */\n  moveTo(time, options, callback) {\n    if (typeof arguments[1] == \"function\") {\n      callback = arguments[1];\n      options = {};\n    }\n    const interval = this.range.end - this.range.start;\n    const t = util.convert(time, \"Date\").valueOf();\n\n    const start = t - interval / 2;\n    const end = t + interval / 2;\n    const animation =\n      options && options.animation !== undefined ? options.animation : true;\n\n    this.range.setRange(start, end, { animation }, callback);\n  }\n\n  /**\n   * Get the visible window\n   * @return {{start: Date, end: Date}}   Visible range\n   */\n  getWindow() {\n    const range = this.range.getRange();\n    return {\n      start: new Date(range.start),\n      end: new Date(range.end),\n    };\n  }\n\n  /**\n   * Zoom in the window such that given time is centered on screen.\n   * @param {number} percentage - must be between [0..1]\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback] a callback funtion to be executed at the end of this function\n   */\n  zoomIn(percentage, options, callback) {\n    if (!percentage || percentage < 0 || percentage > 1) return;\n    if (typeof arguments[1] == \"function\") {\n      callback = arguments[1];\n      options = {};\n    }\n    const range = this.getWindow();\n    const start = range.start.valueOf();\n    const end = range.end.valueOf();\n    const interval = end - start;\n    const newInterval = interval / (1 + percentage);\n    const distance = (interval - newInterval) / 2;\n    const newStart = start + distance;\n    const newEnd = end - distance;\n\n    this.setWindow(newStart, newEnd, options, callback);\n  }\n\n  /**\n   * Zoom out the window such that given time is centered on screen.\n   * @param {number} percentage - must be between [0..1]\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback] a callback funtion to be executed at the end of this function\n   */\n  zoomOut(percentage, options, callback) {\n    if (!percentage || percentage < 0 || percentage > 1) return;\n    if (typeof arguments[1] == \"function\") {\n      callback = arguments[1];\n      options = {};\n    }\n    const range = this.getWindow();\n    const start = range.start.valueOf();\n    const end = range.end.valueOf();\n    const interval = end - start;\n    const newStart = start - (interval * percentage) / 2;\n    const newEnd = end + (interval * percentage) / 2;\n\n    this.setWindow(newStart, newEnd, options, callback);\n  }\n\n  /**\n   * Force a redraw. Can be overridden by implementations of Core\n   *\n   * Note: this function will be overridden on construction with a trottled version\n   */\n  redraw() {\n    this._redraw();\n  }\n\n  /**\n   * Redraw for internal use. Redraws all components. See also the public\n   * method redraw.\n   * @protected\n   */\n  _redraw() {\n    this.redrawCount++;\n    const dom = this.dom;\n\n    if (!dom || !dom.container || dom.root.offsetWidth == 0) return; // when destroyed, or invisible\n\n    let resized = false;\n    const options = this.options;\n    const props = this.props;\n\n    DateUtil.updateHiddenDates(\n      this.options.moment,\n      this.body,\n      this.options.hiddenDates,\n    );\n\n    // update class names\n    if (options.orientation == \"top\") {\n      util.addClassName(dom.root, \"vis-top\");\n      util.removeClassName(dom.root, \"vis-bottom\");\n    } else {\n      util.removeClassName(dom.root, \"vis-top\");\n      util.addClassName(dom.root, \"vis-bottom\");\n    }\n\n    if (options.rtl) {\n      util.addClassName(dom.root, \"vis-rtl\");\n      util.removeClassName(dom.root, \"vis-ltr\");\n    } else {\n      util.addClassName(dom.root, \"vis-ltr\");\n      util.removeClassName(dom.root, \"vis-rtl\");\n    }\n\n    // update root width and height options\n    dom.root.style.maxHeight = util.option.asSize(options.maxHeight, \"\");\n    dom.root.style.minHeight = util.option.asSize(options.minHeight, \"\");\n    dom.root.style.width = util.option.asSize(options.width, \"\");\n    const rootOffsetWidth = dom.root.offsetWidth;\n\n    // calculate border widths\n    props.border.left = 1;\n    props.border.right = 1;\n    props.border.top = 1;\n    props.border.bottom = 1;\n\n    // calculate the heights. If any of the side panels is empty, we set the height to\n    // minus the border width, such that the border will be invisible\n    props.center.height = dom.center.offsetHeight;\n    props.left.height = dom.left.offsetHeight;\n    props.right.height = dom.right.offsetHeight;\n    props.top.height = dom.top.clientHeight || -props.border.top;\n    props.bottom.height =\n      Math.round(dom.bottom.getBoundingClientRect().height) ||\n      dom.bottom.clientHeight ||\n      -props.border.bottom;\n\n    // TODO: compensate borders when any of the panels is empty.\n\n    // apply auto height\n    // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM)\n    const contentHeight = Math.max(\n      props.left.height,\n      props.center.height,\n      props.right.height,\n    );\n    const autoHeight =\n      props.top.height +\n      contentHeight +\n      props.bottom.height +\n      props.border.top +\n      props.border.bottom;\n    dom.root.style.height = util.option.asSize(\n      options.height,\n      `${autoHeight}px`,\n    );\n\n    // calculate heights of the content panels\n    props.root.height = dom.root.offsetHeight;\n    props.background.height = props.root.height;\n    const containerHeight =\n      props.root.height - props.top.height - props.bottom.height;\n    props.centerContainer.height = containerHeight;\n    props.leftContainer.height = containerHeight;\n    props.rightContainer.height = props.leftContainer.height;\n\n    // calculate the widths of the panels\n    props.root.width = rootOffsetWidth;\n    props.background.width = props.root.width;\n\n    if (!this.initialDrawDone) {\n      props.scrollbarWidth = util.getScrollBarWidth();\n    }\n\n    const leftContainerClientWidth = dom.leftContainer.clientWidth;\n    const rightContainerClientWidth = dom.rightContainer.clientWidth;\n\n    if (options.verticalScroll) {\n      if (options.rtl) {\n        props.left.width = leftContainerClientWidth || -props.border.left;\n        props.right.width =\n          rightContainerClientWidth + props.scrollbarWidth ||\n          -props.border.right;\n      } else {\n        props.left.width =\n          leftContainerClientWidth + props.scrollbarWidth || -props.border.left;\n        props.right.width = rightContainerClientWidth || -props.border.right;\n      }\n    } else {\n      props.left.width = leftContainerClientWidth || -props.border.left;\n      props.right.width = rightContainerClientWidth || -props.border.right;\n    }\n\n    this._setDOM();\n\n    // update the scrollTop, feasible range for the offset can be changed\n    // when the height of the Core or of the contents of the center changed\n    let offset = this._updateScrollTop();\n\n    // reposition the scrollable contents\n    if (options.orientation.item != \"top\") {\n      offset += Math.max(\n        props.centerContainer.height -\n          props.center.height -\n          props.border.top -\n          props.border.bottom,\n        0,\n      );\n    }\n    dom.center.style.transform = `translateY(${offset}px)`;\n\n    // show shadows when vertical scrolling is available\n    const visibilityTop = props.scrollTop == 0 ? \"hidden\" : \"\";\n    const visibilityBottom =\n      props.scrollTop == props.scrollTopMin ? \"hidden\" : \"\";\n    dom.shadowTop.style.visibility = visibilityTop;\n    dom.shadowBottom.style.visibility = visibilityBottom;\n    dom.shadowTopLeft.style.visibility = visibilityTop;\n    dom.shadowBottomLeft.style.visibility = visibilityBottom;\n    dom.shadowTopRight.style.visibility = visibilityTop;\n    dom.shadowBottomRight.style.visibility = visibilityBottom;\n\n    if (options.verticalScroll) {\n      dom.rightContainer.className = \"vis-panel vis-right vis-vertical-scroll\";\n      dom.leftContainer.className = \"vis-panel vis-left vis-vertical-scroll\";\n\n      dom.shadowTopRight.style.visibility = \"hidden\";\n      dom.shadowBottomRight.style.visibility = \"hidden\";\n      dom.shadowTopLeft.style.visibility = \"hidden\";\n      dom.shadowBottomLeft.style.visibility = \"hidden\";\n\n      dom.left.style.top = \"0px\";\n      dom.right.style.top = \"0px\";\n    }\n\n    if (\n      !options.verticalScroll ||\n      props.center.height < props.centerContainer.height\n    ) {\n      dom.left.style.top = `${offset}px`;\n      dom.right.style.top = `${offset}px`;\n      dom.rightContainer.className = dom.rightContainer.className.replace(\n        new RegExp(\"(?:^|\\\\s)\" + \"vis-vertical-scroll\" + \"(?:\\\\s|$)\"),\n        \" \",\n      );\n      dom.leftContainer.className = dom.leftContainer.className.replace(\n        new RegExp(\"(?:^|\\\\s)\" + \"vis-vertical-scroll\" + \"(?:\\\\s|$)\"),\n        \" \",\n      );\n      props.left.width = leftContainerClientWidth || -props.border.left;\n      props.right.width = rightContainerClientWidth || -props.border.right;\n      this._setDOM();\n    }\n\n    // enable/disable vertical panning\n    const contentsOverflow = props.center.height > props.centerContainer.height;\n    this.hammer.get(\"pan\").set({\n      direction: contentsOverflow\n        ? Hammer.DIRECTION_ALL\n        : Hammer.DIRECTION_HORIZONTAL,\n    });\n\n    // set the long press time\n    this.hammer.get(\"press\").set({\n      time: this.options.longSelectPressTime,\n    });\n\n    // redraw all components\n    this.components.forEach((component) => {\n      resized = component.redraw() || resized;\n    });\n    const MAX_REDRAW = 5;\n    if (resized) {\n      if (this.redrawCount < MAX_REDRAW) {\n        this.body.emitter.emit(\"_change\");\n        return;\n      } else {\n        console.log(\"WARNING: infinite loop in redraw?\");\n      }\n    } else {\n      this.redrawCount = 0;\n    }\n\n    //Emit public 'changed' event for UI updates, see issue #1592\n    this.body.emitter.emit(\"changed\");\n  }\n\n  /**\n   * sets the basic DOM components needed for the timeline\\graph2d\n   */\n  _setDOM() {\n    const props = this.props;\n    const dom = this.dom;\n\n    props.leftContainer.width = props.left.width;\n    props.rightContainer.width = props.right.width;\n    const centerWidth = props.root.width - props.left.width - props.right.width;\n    props.center.width = centerWidth;\n    props.centerContainer.width = centerWidth;\n    props.top.width = centerWidth;\n    props.bottom.width = centerWidth;\n\n    // resize the panels\n    dom.background.style.height = `${props.background.height}px`;\n    dom.backgroundVertical.style.height = `${props.background.height}px`;\n    dom.backgroundHorizontal.style.height = `${props.centerContainer.height}px`;\n    dom.centerContainer.style.height = `${props.centerContainer.height}px`;\n    dom.leftContainer.style.height = `${props.leftContainer.height}px`;\n    dom.rightContainer.style.height = `${props.rightContainer.height}px`;\n\n    dom.background.style.width = `${props.background.width}px`;\n    dom.backgroundVertical.style.width = `${props.centerContainer.width}px`;\n    dom.backgroundHorizontal.style.width = `${props.background.width}px`;\n    dom.centerContainer.style.width = `${props.center.width}px`;\n    dom.top.style.width = `${props.top.width}px`;\n    dom.bottom.style.width = `${props.bottom.width}px`;\n\n    // reposition the panels\n    dom.background.style.left = \"0\";\n    dom.background.style.top = \"0\";\n    dom.backgroundVertical.style.left = `${props.left.width + props.border.left}px`;\n    dom.backgroundVertical.style.top = \"0\";\n    dom.backgroundHorizontal.style.left = \"0\";\n    dom.backgroundHorizontal.style.top = `${props.top.height}px`;\n    dom.centerContainer.style.left = `${props.left.width}px`;\n    dom.centerContainer.style.top = `${props.top.height}px`;\n    dom.leftContainer.style.left = \"0\";\n    dom.leftContainer.style.top = `${props.top.height}px`;\n    dom.rightContainer.style.left = `${props.left.width + props.center.width}px`;\n    dom.rightContainer.style.top = `${props.top.height}px`;\n    dom.top.style.left = `${props.left.width}px`;\n    dom.top.style.top = \"0\";\n    dom.bottom.style.left = `${props.left.width}px`;\n    dom.bottom.style.top = `${props.top.height + props.centerContainer.height}px`;\n    dom.center.style.left = \"0\";\n    dom.left.style.left = \"0\";\n    dom.right.style.left = \"0\";\n  }\n\n  /**\n   * Set a current time. This can be used for example to ensure that a client's\n   * time is synchronized with a shared server time.\n   * Only applicable when option `showCurrentTime` is true.\n   * @param {Date | string | number} time     A Date, unix timestamp, or\n   *                                          ISO date string.\n   */\n  setCurrentTime(time) {\n    if (!this.currentTime) {\n      throw new Error(\"Option showCurrentTime must be true\");\n    }\n\n    this.currentTime.setCurrentTime(time);\n  }\n\n  /**\n   * Get the current time.\n   * Only applicable when option `showCurrentTime` is true.\n   * @return {Date} Returns the current time.\n   */\n  getCurrentTime() {\n    if (!this.currentTime) {\n      throw new Error(\"Option showCurrentTime must be true\");\n    }\n\n    return this.currentTime.getCurrentTime();\n  }\n\n  /**\n   * Convert a position on screen (pixels) to a datetime\n   * @param {int}     x    Position on the screen in pixels\n   * @return {Date}   time The datetime the corresponds with given position x\n   * @protected\n   * TODO: move this function to Range\n   */\n  _toTime(x) {\n    return DateUtil.toTime(this, x, this.props.center.width);\n  }\n\n  /**\n   * Convert a position on the global screen (pixels) to a datetime\n   * @param {int}     x    Position on the screen in pixels\n   * @return {Date}   time The datetime the corresponds with given position x\n   * @protected\n   * TODO: move this function to Range\n   */\n  _toGlobalTime(x) {\n    return DateUtil.toTime(this, x, this.props.root.width);\n    //var conversion = this.range.conversion(this.props.root.width);\n    //return new Date(x / conversion.scale + conversion.offset);\n  }\n\n  /**\n   * Convert a datetime (Date object) into a position on the screen\n   * @param {Date}   time A date\n   * @return {int}   x    The position on the screen in pixels which corresponds\n   *                      with the given date.\n   * @protected\n   * TODO: move this function to Range\n   */\n  _toScreen(time) {\n    return DateUtil.toScreen(this, time, this.props.center.width);\n  }\n\n  /**\n   * Convert a datetime (Date object) into a position on the root\n   * This is used to get the pixel density estimate for the screen, not the center panel\n   * @param {Date}   time A date\n   * @return {int}   x    The position on root in pixels which corresponds\n   *                      with the given date.\n   * @protected\n   * TODO: move this function to Range\n   */\n  _toGlobalScreen(time) {\n    return DateUtil.toScreen(this, time, this.props.root.width);\n    //var conversion = this.range.conversion(this.props.root.width);\n    //return (time.valueOf() - conversion.offset) * conversion.scale;\n  }\n\n  /**\n   * Initialize watching when option autoResize is true\n   * @private\n   */\n  _initAutoResize() {\n    if (this.options.autoResize == true) {\n      this._startAutoResize();\n    } else {\n      this._stopAutoResize();\n    }\n  }\n\n  /**\n   * Watch for changes in the size of the container. On resize, the Panel will\n   * automatically redraw itself.\n   * @private\n   */\n  _startAutoResize() {\n    const me = this;\n\n    this._stopAutoResize();\n\n    this._onResize = () => {\n      if (me.options.autoResize != true) {\n        // stop watching when the option autoResize is changed to false\n        me._stopAutoResize();\n        return;\n      }\n\n      if (me.dom.root) {\n        const rootOffsetHeight = me.dom.root.offsetHeight;\n        const rootOffsetWidth = me.dom.root.offsetWidth;\n        // check whether the frame is resized\n        // Note: we compare offsetWidth here, not clientWidth. For some reason,\n        // IE does not restore the clientWidth from 0 to the actual width after\n        // changing the timeline's container display style from none to visible\n        if (\n          rootOffsetWidth != me.props.lastWidth ||\n          rootOffsetHeight != me.props.lastHeight\n        ) {\n          me.props.lastWidth = rootOffsetWidth;\n          me.props.lastHeight = rootOffsetHeight;\n          me.props.scrollbarWidth = util.getScrollBarWidth();\n\n          me.body.emitter.emit(\"_change\");\n        }\n      }\n    };\n\n    // add event listener to window resize\n    window.addEventListener(\"resize\", this._onResize);\n\n    //Prevent initial unnecessary redraw\n    if (me.dom.root) {\n      me.props.lastWidth = me.dom.root.offsetWidth;\n      me.props.lastHeight = me.dom.root.offsetHeight;\n    }\n\n    this.watchTimer = setInterval(this._onResize, 1000);\n  }\n\n  /**\n   * Stop watching for a resize of the frame.\n   * @private\n   */\n  _stopAutoResize() {\n    if (this.watchTimer) {\n      clearInterval(this.watchTimer);\n      this.watchTimer = undefined;\n    }\n\n    // remove event listener on window.resize\n    if (this._onResize) {\n      window.removeEventListener(\"resize\", this._onResize);\n      this._onResize = null;\n    }\n  }\n\n  /**\n   * Start moving the timeline vertically\n   * @private\n   */\n  _onTouch() {\n    this.touch.allowDragging = true;\n    this.touch.initialScrollTop = this.props.scrollTop;\n  }\n\n  /**\n   * Start moving the timeline vertically\n   * @private\n   */\n  _onPinch() {\n    this.touch.allowDragging = false;\n  }\n\n  /**\n   * Move the timeline vertically\n   * @param {Event} event\n   * @private\n   */\n  _onDrag(event) {\n    if (!event) return;\n    // refuse to drag when we where pinching to prevent the timeline make a jump\n    // when releasing the fingers in opposite order from the touch screen\n    if (!this.touch.allowDragging) return;\n\n    const delta = event.deltaY;\n\n    const oldScrollTop = this._getScrollTop();\n    const newScrollTop = this._setScrollTop(\n      this.touch.initialScrollTop + delta,\n    );\n\n    if (this.options.verticalScroll) {\n      this.dom.left.parentNode.scrollTop = -this.props.scrollTop;\n      this.dom.right.parentNode.scrollTop = -this.props.scrollTop;\n    }\n\n    if (newScrollTop != oldScrollTop) {\n      this.emit(\"verticalDrag\");\n    }\n  }\n\n  /**\n   * Apply a scrollTop\n   * @param {number} scrollTop\n   * @returns {number} scrollTop  Returns the applied scrollTop\n   * @private\n   */\n  _setScrollTop(scrollTop) {\n    this.props.scrollTop = scrollTop;\n    this._updateScrollTop();\n    return this.props.scrollTop;\n  }\n\n  /**\n   * Update the current scrollTop when the height of  the containers has been changed\n   * @returns {number} scrollTop  Returns the applied scrollTop\n   * @private\n   */\n  _updateScrollTop() {\n    // recalculate the scrollTopMin\n    const scrollTopMin = Math.min(\n      this.props.centerContainer.height -\n        this.props.border.top -\n        this.props.border.bottom -\n        this.props.center.height,\n      0,\n    ); // is negative or zero\n    if (scrollTopMin != this.props.scrollTopMin) {\n      // in case of bottom orientation, change the scrollTop such that the contents\n      // do not move relative to the time axis at the bottom\n      if (this.options.orientation.item != \"top\") {\n        this.props.scrollTop += scrollTopMin - this.props.scrollTopMin;\n      }\n      this.props.scrollTopMin = scrollTopMin;\n    }\n\n    // limit the scrollTop to the feasible scroll range\n    if (this.props.scrollTop > 0) this.props.scrollTop = 0;\n    if (this.props.scrollTop < scrollTopMin)\n      this.props.scrollTop = scrollTopMin;\n\n    if (this.options.verticalScroll) {\n      this.dom.left.parentNode.scrollTop = -this.props.scrollTop;\n      this.dom.right.parentNode.scrollTop = -this.props.scrollTop;\n    }\n    return this.props.scrollTop;\n  }\n\n  /**\n   * Get the current scrollTop\n   * @returns {number} scrollTop\n   * @private\n   */\n  _getScrollTop() {\n    return this.props.scrollTop;\n  }\n\n  /**\n   * Load a configurator\n   * [at]returns {Object}\n   * @private\n   */\n  _createConfigurator() {\n    throw new Error(\"Cannot invoke abstract method _createConfigurator\");\n  }\n}\n\n// turn Core into an event emitter\nEmitter(Core.prototype);\n\nexport default Core;\n", "import util from \"../../util.js\";\nimport Component from \"./Component.js\";\nimport moment from \"../../module/moment.js\";\nimport locales from \"../locales.js\";\n\n/**\n * A current time bar\n */\nclass CurrentTime extends Component {\n  /**\n   * @param {{range: Range, dom: Object, domProps: Object}} body\n   * @param {Object} [options]        Available parameters:\n   *                                  {Boolean} [showCurrentTime]\n   *                                  {String}  [alignCurrentTime]\n   * @constructor CurrentTime\n   * @extends Component\n   */\n  constructor(body, options) {\n    super();\n    this.body = body;\n\n    // default options\n    this.defaultOptions = {\n      rtl: false,\n      showCurrentTime: true,\n      alignCurrentTime: undefined,\n\n      moment,\n      locales,\n      locale: \"en\",\n    };\n    this.options = util.extend({}, this.defaultOptions);\n    this.setOptions(options);\n    this.options.locales = util.extend({}, locales, this.options.locales);\n    const defaultLocales =\n      this.defaultOptions.locales[this.defaultOptions.locale];\n    Object.keys(this.options.locales).forEach((locale) => {\n      this.options.locales[locale] = util.extend(\n        {},\n        defaultLocales,\n        this.options.locales[locale],\n      );\n    });\n    this.offset = 0;\n\n    this._create();\n  }\n\n  /**\n   * Create the HTML DOM for the current time bar\n   * @private\n   */\n  _create() {\n    const bar = document.createElement(\"div\");\n    bar.className = \"vis-current-time\";\n    bar.style.position = \"absolute\";\n    bar.style.top = \"0px\";\n    bar.style.height = \"100%\";\n\n    this.bar = bar;\n  }\n\n  /**\n   * Destroy the CurrentTime bar\n   */\n  destroy() {\n    this.options.showCurrentTime = false;\n    this.redraw(); // will remove the bar from the DOM and stop refreshing\n\n    this.body = null;\n  }\n\n  /**\n   * Set options for the component. Options will be merged in current options.\n   * @param {Object} options  Available parameters:\n   *                          {boolean} [showCurrentTime]\n   *                          {String}  [alignCurrentTime]\n   */\n  setOptions(options) {\n    if (options) {\n      // copy all options that we know\n      util.selectiveExtend(\n        [\n          \"rtl\",\n          \"showCurrentTime\",\n          \"alignCurrentTime\",\n          \"moment\",\n          \"locale\",\n          \"locales\",\n        ],\n        this.options,\n        options,\n      );\n    }\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    if (this.options.showCurrentTime) {\n      const parent = this.body.dom.backgroundVertical;\n      if (this.bar.parentNode != parent) {\n        // attach to the dom\n        if (this.bar.parentNode) {\n          this.bar.parentNode.removeChild(this.bar);\n        }\n        parent.appendChild(this.bar);\n\n        this.start();\n      }\n\n      let now = this.options.moment(Date.now() + this.offset);\n\n      if (this.options.alignCurrentTime) {\n        now = now.startOf(this.options.alignCurrentTime);\n      }\n\n      const x = this.body.util.toScreen(now);\n\n      let locale = this.options.locales[this.options.locale];\n      if (!locale) {\n        if (!this.warned) {\n          console.warn(\n            `WARNING: options.locales['${this.options.locale}'] not found. See https://visjs.github.io/vis-timeline/docs/timeline/#Localization`,\n          );\n          this.warned = true;\n        }\n        locale = this.options.locales[\"en\"]; // fall back on english when not available\n      }\n      let title = `${locale.current} ${locale.time}: ${now.format(\"dddd, MMMM Do YYYY, H:mm:ss\")}`;\n      title = title.charAt(0).toUpperCase() + title.substring(1);\n\n      if (this.options.rtl) {\n        this.bar.style.transform = `translateX(${x * -1}px)`;\n      } else {\n        this.bar.style.transform = `translateX(${x}px)`;\n      }\n      this.bar.title = title;\n    } else {\n      // remove the line from the DOM\n      if (this.bar.parentNode) {\n        this.bar.parentNode.removeChild(this.bar);\n      }\n      this.stop();\n    }\n\n    return false;\n  }\n\n  /**\n   * Start auto refreshing the current time bar\n   */\n  start() {\n    const me = this;\n\n    /**\n     *  Updates the current time.\n     */\n    function update() {\n      me.stop();\n\n      // determine interval to refresh\n      const scale = me.body.range.conversion(\n        me.body.domProps.center.width,\n      ).scale;\n      let interval = 1 / scale / 10;\n      if (interval < 30) interval = 30;\n      if (interval > 1000) interval = 1000;\n\n      me.redraw();\n      me.body.emitter.emit(\"currentTimeTick\");\n\n      // start a renderTimer to adjust for the new time\n      me.currentTimeTimer = setTimeout(update, interval);\n    }\n\n    update();\n  }\n\n  /**\n   * Stop auto refreshing the current time bar\n   */\n  stop() {\n    if (this.currentTimeTimer !== undefined) {\n      clearTimeout(this.currentTimeTimer);\n      delete this.currentTimeTimer;\n    }\n  }\n\n  /**\n   * Set a current time. This can be used for example to ensure that a client's\n   * time is synchronized with a shared server time.\n   * @param {Date | string | number} time     A Date, unix timestamp, or\n   *                                          ISO date string.\n   */\n  setCurrentTime(time) {\n    const t = util.convert(time, \"Date\").valueOf();\n    const now = Date.now();\n    this.offset = t - now;\n    this.redraw();\n  }\n\n  /**\n   * Get the current time.\n   * @return {Date} Returns the current time.\n   */\n  getCurrentTime() {\n    return new Date(Date.now() + this.offset);\n  }\n}\n\nexport default CurrentTime;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\n// eslint-disable-next-line es/no-array-prototype-find -- testing\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n", "'use strict';\nrequire('../../../modules/es.array.find');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'find');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/find');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.find;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.find) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/find');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/find\");", "// Utility functions for ordering and stacking of items\nconst EPSILON = 0.001; // used when checking collisions, to prevent round-off errors\n\n/**\n * Order items by their start data\n * @param {Item[]} items\n */\nexport function orderByStart(items) {\n  items.sort((a, b) => a.data.start - b.data.start);\n}\n\n/**\n * Order items by their end date. If they have no end date, their start date\n * is used.\n * @param {Item[]} items\n */\nexport function orderByEnd(items) {\n  items.sort((a, b) => {\n    const aTime = \"end\" in a.data ? a.data.end : a.data.start;\n    const bTime = \"end\" in b.data ? b.data.end : b.data.start;\n\n    return aTime - bTime;\n  });\n}\n\n/**\n * Adjust vertical positions of the items such that they don't overlap each\n * other.\n * @param {Item[]} items\n *            All visible items\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n * @param {boolean} [force=false]\n *            If true, all items will be repositioned. If false (default), only\n *            items having a top===null will be re-stacked\n * @param {function} shouldBailItemsRedrawFunction\n *            bailing function\n * @return {boolean} shouldBail\n */\nexport function stack(items, margin, force, shouldBailItemsRedrawFunction) {\n  const stackingResult = performStacking(\n    items,\n    margin.item,\n    false,\n    (item) => item.stack && (force || item.top === null),\n    (item) => item.stack,\n    () => margin.axis,\n    shouldBailItemsRedrawFunction,\n  );\n\n  // If shouldBail function returned true during stacking calculation\n  return stackingResult === null;\n}\n\n/**\n * Adjust vertical positions of the items within a single subgroup such that they\n * don't overlap each other.\n * @param {Item[]} items\n *            All items withina subgroup\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n * @param {subgroup} subgroup\n *            The subgroup that is being stacked\n */\nexport function substack(items, margin, subgroup) {\n  const subgroupHeight = performStacking(\n    items,\n    margin.item,\n    false,\n    (item) => item.stack,\n    () => true,\n    (item) => item.baseTop,\n  );\n  subgroup.height = subgroupHeight - subgroup.top + 0.5 * margin.item.vertical;\n}\n\n/**\n * Adjust vertical positions of the items without stacking them\n * @param {Item[]} items\n *            All visible items\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n * @param {subgroups[]} subgroups\n *            All subgroups\n * @param {boolean} isStackSubgroups\n */\nexport function nostack(items, margin, subgroups, isStackSubgroups) {\n  for (let i = 0; i < items.length; i++) {\n    if (items[i].data.subgroup == undefined) {\n      items[i].top = margin.item.vertical;\n      continue;\n    }\n    if (items[i].data.subgroup === undefined || !isStackSubgroups) continue;\n\n    let newTop = 0;\n    for (const subgroup in subgroups) {\n      if (\n        !Object.prototype.hasOwnProperty.call(subgroups, subgroup) ||\n        subgroups[subgroup].visible !== true ||\n        subgroups[subgroup].index >= subgroups[items[i].data.subgroup].index\n      )\n        continue;\n\n      newTop += subgroups[subgroup].height;\n      subgroups[items[i].data.subgroup].top = newTop;\n    }\n    items[i].top = newTop + 0.5 * margin.item.vertical;\n  }\n\n  if (!isStackSubgroups) stackSubgroups(items, margin, subgroups);\n}\n\n/**\n * Adjust vertical positions of the subgroups such that they don't overlap each\n * other.\n * @param {Array.<timeline.Item>} items\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin Margins between items and between items and the axis.\n * @param {subgroups[]} subgroups\n *            All subgroups\n */\nexport function stackSubgroups(items, margin, subgroups) {\n  performStacking(\n    Object.values(subgroups).sort((a, b) => {\n      if (a.index > b.index) return 1;\n      if (a.index < b.index) return -1;\n      return 0;\n    }),\n    {\n      vertical: 0,\n    },\n    true,\n    () => true,\n    () => true,\n    () => 0,\n  );\n\n  for (let i = 0; i < items.length; i++) {\n    if (items[i].data.subgroup !== undefined) {\n      items[i].top =\n        subgroups[items[i].data.subgroup].top + 0.5 * margin.item.vertical;\n    }\n  }\n}\n\n/**\n * Adjust vertical positions of the subgroups such that they don't overlap each\n * other, then stacks the contents of each subgroup individually.\n * @param {Item[]} subgroupItems\n *            All the items in a subgroup\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n * @param {subgroups[]} subgroups\n *            All subgroups\n */\nexport function stackSubgroupsWithInnerStack(subgroupItems, margin, subgroups) {\n  let doSubStack = false;\n\n  // Run subgroups in their order (if any)\n  const subgroupOrder = [];\n\n  for (let subgroup in subgroups) {\n    if (Object.prototype.hasOwnProperty.call(subgroups[subgroup], \"index\")) {\n      subgroupOrder[subgroups[subgroup].index] = subgroup;\n    } else {\n      subgroupOrder.push(subgroup);\n    }\n  }\n\n  for (let j = 0; j < subgroupOrder.length; j++) {\n    let subgroup = subgroupOrder[j];\n    if (!Object.prototype.hasOwnProperty.call(subgroups, subgroup)) continue;\n\n    doSubStack = doSubStack || subgroups[subgroup].stack;\n    subgroups[subgroup].top = 0;\n\n    for (const otherSubgroup in subgroups) {\n      if (\n        subgroups[otherSubgroup].visible &&\n        subgroups[subgroup].index > subgroups[otherSubgroup].index\n      ) {\n        subgroups[subgroup].top += subgroups[otherSubgroup].height;\n      }\n    }\n\n    const items = subgroupItems[subgroup];\n    for (let i = 0; i < items.length; i++) {\n      if (items[i].data.subgroup === undefined) continue;\n\n      items[i].top =\n        subgroups[items[i].data.subgroup].top + 0.5 * margin.item.vertical;\n      if (subgroups[subgroup].stack) items[i].baseTop = items[i].top;\n    }\n\n    if (doSubStack && subgroups[subgroup].stack)\n      substack(subgroupItems[subgroup], margin, subgroups[subgroup]);\n  }\n}\n\n/**\n * Reusable stacking function\n *\n * @param {Item[]} items\n * An array of items to consider during stacking.\n * @param {{horizontal: number, vertical: number}} margins\n * Margins to be used for collision checking and placement of items.\n * @param {boolean} compareTimes\n * By default, horizontal collision is checked based on the spatial position of the items (left/right and width).\n * If this argument is true, horizontal collision will instead be checked based on the start/end times of each item.\n * Vertical collision is always checked spatially.\n * @param {function(Item): number | null} shouldStack\n * A callback function which is called before we start to process an item. The return value indicates whether the item will be processed.\n * @param {function(Item): boolean} shouldOthersStack\n * A callback function which indicates whether other items should consider this item when being stacked.\n * @param {function(Item): number} getInitialHeight\n * A callback function which determines the height items are initially placed at\n * @param {function(): boolean} shouldBail\n * A callback function which should indicate if the stacking process should be aborted.\n *\n * @returns {null|number}\n * if shouldBail was triggered, returns null\n * otherwise, returns the maximum height\n */\nfunction performStacking(\n  items,\n  margins,\n  compareTimes,\n  shouldStack,\n  shouldOthersStack,\n  getInitialHeight,\n  shouldBail,\n) {\n  // Time-based horizontal comparison\n  let getItemStart = (item) => item.start;\n  let getItemEnd = (item) => item.end;\n  if (!compareTimes) {\n    // Spatial horizontal comparisons\n    const rtl = !!(items[0] && items[0].options.rtl);\n    if (rtl) {\n      getItemStart = (item) => item.right;\n    } else {\n      getItemStart = (item) => item.left;\n    }\n    getItemEnd = (item) => getItemStart(item) + item.width + margins.horizontal;\n  }\n\n  const itemsToPosition = [];\n  const itemsAlreadyPositioned = []; // It's vital that this array is kept sorted based on the start of each item\n\n  // If the order we needed to place items was based purely on the start of each item, we could calculate stacking very efficiently.\n  // Unfortunately for us, this is not guaranteed. But the order is often based on the start of items at least to some degree, and\n  // we can use this to make some optimisations. While items are proceeding in order of start, we can keep moving our search indexes\n  // forwards. Then if we encounter an item that's out of order, we reset our indexes and search from the beginning of the array again.\n  let previousStart = null;\n  let insertionIndex = 0;\n\n  // First let's handle any immoveable items\n  for (const item of items) {\n    if (shouldStack(item)) {\n      itemsToPosition.push(item);\n    } else {\n      if (shouldOthersStack(item)) {\n        const itemStart = getItemStart(item);\n\n        // We need to put immoveable items into itemsAlreadyPositioned and ensure that this array is sorted.\n        // We could simply insert them, and then use JavaScript's sort function to sort them afterwards.\n        // This would achieve an average complexity of O(n log n).\n        //\n        // Instead, I'm gambling that the start of each item will usually be the same or later than the\n        // start of the previous item. While this holds (best case), we can insert items in O(n).\n        // In the worst case (where each item starts before the previous item) this grows to O(n^2).\n        //\n        // I am making the assumption that for most datasets, the \"order\" function will have relatively low cardinality,\n        // and therefore this tradeoff should be easily worth it.\n        if (previousStart !== null && itemStart < previousStart - EPSILON) {\n          insertionIndex = 0;\n        }\n        previousStart = itemStart;\n\n        insertionIndex = findIndexFrom(\n          itemsAlreadyPositioned,\n          (i) => getItemStart(i) - EPSILON > itemStart,\n          insertionIndex,\n        );\n\n        itemsAlreadyPositioned.splice(insertionIndex, 0, item);\n        insertionIndex++;\n      }\n    }\n  }\n\n  // Now we can loop through each item (in order) and find a position for them\n  previousStart = null;\n  let previousEnd = null;\n  insertionIndex = 0;\n  let horizontalOverlapStartIndex = 0;\n  let horizontalOverlapEndIndex = 0;\n  let maxHeight = 0;\n  while (itemsToPosition.length > 0) {\n    const item = itemsToPosition.shift();\n\n    item.top = getInitialHeight(item);\n\n    const itemStart = getItemStart(item);\n    const itemEnd = getItemEnd(item);\n    if (previousStart !== null && itemStart < previousStart - EPSILON) {\n      horizontalOverlapStartIndex = 0;\n      horizontalOverlapEndIndex = 0;\n      insertionIndex = 0;\n      previousEnd = null;\n    }\n    if (previousStart === null || itemStart > previousStart + EPSILON) {\n      // Take advantage of the sorted itemsAlreadyPositioned array to narrow down the search\n      horizontalOverlapStartIndex = findIndexFrom(\n        itemsAlreadyPositioned,\n        (i) => itemStart < getItemEnd(i) - EPSILON,\n        horizontalOverlapStartIndex,\n      );\n    }\n    previousStart = itemStart;\n\n    // Since items aren't sorted by end time, it might increase or decrease from one item to the next. In order to keep an efficient search area, we will seek forwards/backwards accordingly.\n    if (previousEnd === null || previousEnd < itemEnd - EPSILON) {\n      horizontalOverlapEndIndex = findIndexFrom(\n        itemsAlreadyPositioned,\n        (i) => itemEnd < getItemStart(i) - EPSILON,\n        Math.max(horizontalOverlapStartIndex, horizontalOverlapEndIndex),\n      );\n    }\n    if (previousEnd !== null && previousEnd - EPSILON > itemEnd) {\n      horizontalOverlapEndIndex =\n        findLastIndexBetween(\n          itemsAlreadyPositioned,\n          (i) => itemEnd + EPSILON >= getItemStart(i),\n          horizontalOverlapStartIndex,\n          horizontalOverlapEndIndex,\n        ) + 1;\n    }\n    previousEnd = itemEnd;\n\n    // Sort by vertical position so we don't have to reconsider past items if we move an item\n    const horizontallyCollidingItems = filterBetween(\n      itemsAlreadyPositioned,\n      (i) => itemStart < getItemEnd(i) - EPSILON,\n      horizontalOverlapStartIndex,\n      horizontalOverlapEndIndex,\n    ).sort((a, b) => a.top - b.top);\n\n    // Keep moving the item down until it stops colliding with any other items\n    for (let i2 = 0; i2 < horizontallyCollidingItems.length; i2++) {\n      const otherItem = horizontallyCollidingItems[i2];\n\n      if (checkVerticalSpatialCollision(item, otherItem, margins)) {\n        item.top = otherItem.top + otherItem.height + margins.vertical;\n      }\n    }\n\n    if (shouldOthersStack(item)) {\n      // Insert the item into itemsAlreadyPositioned, ensuring itemsAlreadyPositioned remains sorted.\n      // In the best case, we can insert an item in constant time O(1). In the worst case, we insert an item in linear time O(n).\n      // In both cases, this is better than doing a naive insert and then sort, which would cost on average O(n log n).\n      insertionIndex = findIndexFrom(\n        itemsAlreadyPositioned,\n        (i) => getItemStart(i) - EPSILON > itemStart,\n        insertionIndex,\n      );\n\n      itemsAlreadyPositioned.splice(insertionIndex, 0, item);\n\n      if (insertionIndex < horizontalOverlapStartIndex) {\n        horizontalOverlapStartIndex++;\n      }\n\n      if (insertionIndex <= horizontalOverlapEndIndex) {\n        horizontalOverlapEndIndex++;\n      }\n\n      insertionIndex++;\n    }\n\n    // Keep track of the tallest item we've seen before\n    const currentHeight = item.top + item.height;\n    if (currentHeight > maxHeight) {\n      maxHeight = currentHeight;\n    }\n\n    if (shouldBail && shouldBail()) {\n      return null;\n    }\n  }\n\n  return maxHeight;\n}\n\n/**\n * Test if the two provided items collide\n * The items must have parameters left, width, top, and height.\n * @param {Item} a          The first item\n * @param {Item} b          The second item\n * @param {{vertical: number}} margin\n *                          An object containing a horizontal and vertical\n *                          minimum required margin.\n * @return {boolean}        true if a and b collide, else false\n */\nfunction checkVerticalSpatialCollision(a, b, margin) {\n  return (\n    a.top - margin.vertical + EPSILON < b.top + b.height &&\n    a.top + a.height + margin.vertical - EPSILON > b.top\n  );\n}\n\n/**\n * Find index of first item to meet predicate after a certain index.\n * If no such item is found, returns the length of the array.\n *\n * @param {any[]} arr The array\n * @param {function(item): boolean} predicate A function that should return true when a suitable item is found\n * @param {number|undefined} startIndex The index to start search from (inclusive). Optional, if not provided will search from the beginning of the array.\n *\n * @return {number}\n */\nfunction findIndexFrom(arr, predicate, startIndex) {\n  if (!startIndex) {\n    startIndex = 0;\n  }\n  for (let i = startIndex; i < arr.length; i++) {\n    if (predicate(arr[i])) {\n      return i;\n    }\n  }\n  return arr.length;\n}\n\n/**\n * Find index of last item to meet predicate within a given range.\n * If no such item is found, returns the index prior to the start of the range.\n *\n * @param {any[]} arr The array\n * @param {function(item): boolean} predicate A function that should return true when a suitable item is found\n * @param {number|undefined} startIndex The earliest index to search to (inclusive). Optional, if not provided will continue until the start of the array.\n * @param {number|undefined} endIndex The end of the search range (exclusive). The search will begin on the index prior to this value. Optional, defaults to the end of array.\n *\n * @return {number}\n */\nfunction findLastIndexBetween(arr, predicate, startIndex, endIndex) {\n  if (!startIndex) {\n    startIndex = 0;\n  }\n\n  if (!endIndex) {\n    endIndex = arr.length;\n  }\n\n  for (let i = endIndex - 1; i >= startIndex; i--) {\n    if (predicate(arr[i])) {\n      return i;\n    }\n  }\n\n  return startIndex - 1;\n}\n\n/**\n * Takes an array and returns an array containing only items which meet a predicate within a given range.\n *\n * @param {any[]} arr The array\n * @param {function(item): boolean} predicate A function that should return true for items which should be included within the result\n * @param {number|undefined} startIndex The earliest index to include (inclusive). Optional, if not provided will continue until the start of the array.\n * @param {number|undefined} endIndex The end of the range to filter (exclusive). Optional, defaults to the end of array.\n *\n * @return {number}\n */\nfunction filterBetween(arr, predicate, startIndex, endIndex) {\n  if (!startIndex) {\n    startIndex = 0;\n  }\n  if (endIndex) {\n    endIndex = Math.min(endIndex, arr.length);\n  } else {\n    endIndex = arr.length;\n  }\n\n  const result = [];\n  for (let i = startIndex; i < endIndex; i++) {\n    if (predicate(arr[i])) {\n      result.push(arr[i]);\n    }\n  }\n  return result;\n}\n", "import util from \"../../util.js\";\nimport * as stack from \"../Stack.js\";\n\nconst UNGROUPED = \"__ungrouped__\"; // reserved group id for ungrouped items\nconst BACKGROUND = \"__background__\"; // reserved group id for background items without group\n\nexport const ReservedGroupIds = {\n  UNGROUPED,\n  BACKGROUND,\n};\n\n/**\n * @constructor Group\n */\nclass Group {\n  /**\n   * @param {number | string} groupId\n   * @param {Object} data\n   * @param {ItemSet} itemSet\n   * @constructor Group\n   */\n  constructor(groupId, data, itemSet) {\n    this.groupId = groupId;\n    this.subgroups = {};\n    this.subgroupStack = {};\n    this.subgroupStackAll = false;\n    this.subgroupVisibility = {};\n    this.doInnerStack = false;\n    this.shouldBailStackItems = false;\n    this.subgroupIndex = 0;\n    this.subgroupOrderer = data && data.subgroupOrder;\n    this.itemSet = itemSet;\n    this.isVisible = null;\n    this.height = 0;\n    this.stackDirty = true; // if true, items will be restacked on next redraw\n\n    // This is a stack of functions (`() => void`) that will be executed before\n    // the instance is disposed off (method `dispose`). Anything that needs to\n    // be manually disposed off before garbage collection happens (or so that\n    // garbage collection can happen) should be added to this stack.\n    this._disposeCallbacks = [];\n\n    if (data && data.nestedGroups) {\n      this.nestedGroups = data.nestedGroups;\n      if (data.showNested == false) {\n        this.showNested = false;\n      } else {\n        this.showNested = true;\n      }\n    }\n\n    if (data && data.subgroupStack) {\n      if (typeof data.subgroupStack === \"boolean\") {\n        this.doInnerStack = data.subgroupStack;\n        this.subgroupStackAll = data.subgroupStack;\n      } else {\n        // We might be doing stacking on specific sub groups, but only\n        // if at least one is set to do stacking\n        for (const key in data.subgroupStack) {\n          if (!Object.prototype.hasOwnProperty.call(data.subgroupStack, key))\n            continue;\n          this.subgroupStack[key] = data.subgroupStack[key];\n          this.doInnerStack = this.doInnerStack || data.subgroupStack[key];\n        }\n      }\n    }\n\n    if (data && data.heightMode) {\n      this.heightMode = data.heightMode;\n    } else {\n      this.heightMode = itemSet.options.groupHeightMode;\n    }\n\n    this.nestedInGroup = null;\n\n    this.dom = {};\n    this.props = {\n      label: {\n        width: 0,\n        height: 0,\n      },\n    };\n    this.className = null;\n\n    this.items = {}; // items filtered by groupId of this group\n    this.visibleItems = []; // items currently visible in window\n    this.itemsInRange = []; // items currently in range\n    this.orderedItems = {\n      byStart: [],\n      byEnd: [],\n    };\n    this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap.\n\n    const handleCheckRangedItems = () => {\n      this.checkRangedItems = true;\n    };\n    this.itemSet.body.emitter.on(\"checkRangedItems\", handleCheckRangedItems);\n    this._disposeCallbacks.push(() => {\n      this.itemSet.body.emitter.off(\"checkRangedItems\", handleCheckRangedItems);\n    });\n\n    this._create();\n\n    this.setData(data);\n  }\n\n  /**\n   * Create DOM elements for the group\n   * @private\n   */\n  _create() {\n    const label = document.createElement(\"div\");\n    if (this.itemSet.options.groupEditable.order) {\n      label.className = \"vis-label draggable\";\n    } else {\n      label.className = \"vis-label\";\n    }\n    this.dom.label = label;\n\n    const inner = document.createElement(\"div\");\n    inner.className = \"vis-inner\";\n    label.appendChild(inner);\n    this.dom.inner = inner;\n\n    const foreground = document.createElement(\"div\");\n    foreground.className = \"vis-group\";\n    foreground[\"vis-group\"] = this;\n    this.dom.foreground = foreground;\n\n    this.dom.background = document.createElement(\"div\");\n    this.dom.background.className = \"vis-group\";\n\n    this.dom.axis = document.createElement(\"div\");\n    this.dom.axis.className = \"vis-group\";\n\n    // create a hidden marker to detect when the Timelines container is attached\n    // to the DOM, or the style of a parent of the Timeline is changed from\n    // display:none is changed to visible.\n    this.dom.marker = document.createElement(\"div\");\n    this.dom.marker.style.visibility = \"hidden\";\n    this.dom.marker.style.position = \"absolute\";\n    this.dom.marker.innerHTML = \"\";\n    this.dom.background.appendChild(this.dom.marker);\n  }\n\n  /**\n   * Set the group data for this group\n   * @param {Object} data   Group data, can contain properties content and className\n   */\n  setData(data) {\n    if (this.itemSet.groupTouchParams.isDragging) return;\n\n    // update contents\n    let content;\n    let templateFunction;\n\n    if (data && data.subgroupVisibility) {\n      for (const key in data.subgroupVisibility) {\n        if (!Object.prototype.hasOwnProperty.call(data.subgroupVisibility, key))\n          continue;\n        this.subgroupVisibility[key] = data.subgroupVisibility[key];\n      }\n    }\n\n    if (this.itemSet.options && this.itemSet.options.groupTemplate) {\n      templateFunction = this.itemSet.options.groupTemplate.bind(this);\n      content = templateFunction(data, this.dom.inner);\n    } else {\n      content = data && data.content;\n    }\n\n    if (content instanceof Element) {\n      while (this.dom.inner.firstChild) {\n        this.dom.inner.removeChild(this.dom.inner.firstChild);\n      }\n      this.dom.inner.appendChild(content);\n    } else if (content instanceof Object && content.isReactComponent) {\n      // Do nothing. Component was rendered into the node be ReactDOM.render.\n      // That branch is necessary for evasion of a second call templateFunction.\n      // Supports only React < 16(due to the asynchronous nature of React 16).\n    } else if (content instanceof Object) {\n      templateFunction(data, this.dom.inner);\n    } else if (content !== undefined && content !== null) {\n      this.dom.inner.innerHTML = util.xss(content);\n    } else {\n      this.dom.inner.innerHTML = util.xss(this.groupId || \"\"); // groupId can be null\n    }\n\n    // update title\n    this.dom.label.title = (data && data.title) || \"\";\n    if (!this.dom.inner.firstChild) {\n      util.addClassName(this.dom.inner, \"vis-hidden\");\n    } else {\n      util.removeClassName(this.dom.inner, \"vis-hidden\");\n    }\n\n    if (data && data.nestedGroups) {\n      if (!this.nestedGroups || this.nestedGroups != data.nestedGroups) {\n        this.nestedGroups = data.nestedGroups;\n      }\n\n      if (data.showNested !== undefined || this.showNested === undefined) {\n        if (data.showNested == false) {\n          this.showNested = false;\n        } else {\n          this.showNested = true;\n        }\n      }\n\n      util.addClassName(this.dom.label, \"vis-nesting-group\");\n      if (this.showNested) {\n        util.removeClassName(this.dom.label, \"collapsed\");\n        util.addClassName(this.dom.label, \"expanded\");\n      } else {\n        util.removeClassName(this.dom.label, \"expanded\");\n        util.addClassName(this.dom.label, \"collapsed\");\n      }\n    } else if (this.nestedGroups) {\n      this.nestedGroups = null;\n      util.removeClassName(this.dom.label, \"collapsed\");\n      util.removeClassName(this.dom.label, \"expanded\");\n      util.removeClassName(this.dom.label, \"vis-nesting-group\");\n    }\n\n    if (data && (data.treeLevel || data.nestedInGroup)) {\n      util.addClassName(this.dom.label, \"vis-nested-group\");\n      if (data.treeLevel) {\n        util.addClassName(this.dom.label, \"vis-group-level-\" + data.treeLevel);\n      } else {\n        // Nesting level is unknown, but we're sure it's at least 1\n        util.addClassName(this.dom.label, \"vis-group-level-unknown-but-gte1\");\n      }\n    } else {\n      util.addClassName(this.dom.label, \"vis-group-level-0\");\n    }\n\n    // update className\n    const className = (data && data.className) || null;\n    if (className != this.className) {\n      if (this.className) {\n        util.removeClassName(this.dom.label, this.className);\n        util.removeClassName(this.dom.foreground, this.className);\n        util.removeClassName(this.dom.background, this.className);\n        util.removeClassName(this.dom.axis, this.className);\n      }\n      util.addClassName(this.dom.label, className);\n      util.addClassName(this.dom.foreground, className);\n      util.addClassName(this.dom.background, className);\n      util.addClassName(this.dom.axis, className);\n      this.className = className;\n    }\n\n    // update style\n    if (this.style) {\n      util.removeCssText(this.dom.label, this.style);\n      this.style = null;\n    }\n    if (data && data.style) {\n      util.addCssText(this.dom.label, data.style);\n      this.style = data.style;\n    }\n  }\n\n  /**\n   * Get the width of the group label\n   * @return {number} width\n   */\n  getLabelWidth() {\n    return this.props.label.width;\n  }\n\n  /**\n   * check if group has had an initial height hange\n   * @returns {boolean}\n   */\n  _didMarkerHeightChange() {\n    const markerHeight = this.dom.marker.clientHeight;\n    if (markerHeight != this.lastMarkerHeight) {\n      this.lastMarkerHeight = markerHeight;\n      const redrawQueue = {};\n      let redrawQueueLength = 0;\n\n      util.forEach(this.items, (item, key) => {\n        item.dirty = true;\n        if (item.displayed) {\n          const returnQueue = true;\n          redrawQueue[key] = item.redraw(returnQueue);\n          redrawQueueLength = redrawQueue[key].length;\n        }\n      });\n\n      const needRedraw = redrawQueueLength > 0;\n      if (needRedraw) {\n        // redraw all regular items\n        for (let i = 0; i < redrawQueueLength; i++) {\n          util.forEach(redrawQueue, (fns) => {\n            fns[i]();\n          });\n        }\n      }\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * calculate group dimentions and position\n   * @param {number} pixels\n   */\n  _calculateGroupSizeAndPosition() {\n    const { offsetTop, offsetLeft, offsetWidth } = this.dom.foreground;\n    this.top = offsetTop;\n    this.right = offsetLeft;\n    this.width = offsetWidth;\n  }\n\n  /**\n   * checks if should bail redraw of items\n   * @returns {boolean} should bail\n   */\n  _shouldBailItemsRedraw() {\n    const me = this;\n    const timeoutOptions = this.itemSet.options.onTimeout;\n    const bailOptions = {\n      relativeBailingTime: this.itemSet.itemsSettingTime,\n      bailTimeMs: timeoutOptions && timeoutOptions.timeoutMs,\n      userBailFunction: timeoutOptions && timeoutOptions.callback,\n      shouldBailStackItems: this.shouldBailStackItems,\n    };\n    let bail = null;\n    if (!this.itemSet.initialDrawDone) {\n      if (bailOptions.shouldBailStackItems) {\n        return true;\n      }\n      if (\n        Math.abs(Date.now() - new Date(bailOptions.relativeBailingTime)) >\n        bailOptions.bailTimeMs\n      ) {\n        if (\n          bailOptions.userBailFunction &&\n          this.itemSet.userContinueNotBail == null\n        ) {\n          bailOptions.userBailFunction((didUserContinue) => {\n            me.itemSet.userContinueNotBail = didUserContinue;\n            bail = !didUserContinue;\n          });\n        } else if (me.itemSet.userContinueNotBail == false) {\n          bail = true;\n        } else {\n          bail = false;\n        }\n      }\n    }\n\n    return bail;\n  }\n\n  /**\n   * redraws items\n   * @param {boolean} forceRestack\n   * @param {boolean} lastIsVisible\n   * @param {number} margin\n   * @param {object} range\n   * @private\n   */\n  _redrawItems(forceRestack, lastIsVisible, margin, range) {\n    const restack =\n      forceRestack || this.stackDirty || (this.isVisible && !lastIsVisible);\n\n    // if restacking, reposition visible items vertically\n    if (restack) {\n      const orderedItems = {\n        byEnd: this.orderedItems.byEnd.filter((item) => !item.isCluster),\n        byStart: this.orderedItems.byStart.filter((item) => !item.isCluster),\n      };\n\n      const orderedClusters = {\n        byEnd: [\n          ...new Set(\n            this.orderedItems.byEnd\n              .map((item) => item.cluster)\n              .filter((item) => !!item),\n          ),\n        ],\n        byStart: [\n          ...new Set(\n            this.orderedItems.byStart\n              .map((item) => item.cluster)\n              .filter((item) => !!item),\n          ),\n        ],\n      };\n\n      /**\n       * Get all visible items in range\n       * @return {array} items\n       */\n      const getVisibleItems = () => {\n        const visibleItems = this._updateItemsInRange(\n          orderedItems,\n          this.visibleItems.filter((item) => !item.isCluster),\n          range,\n        );\n        const visibleClusters = this._updateClustersInRange(\n          orderedClusters,\n          this.visibleItems.filter((item) => item.isCluster),\n          range,\n        );\n        return [...visibleItems, ...visibleClusters];\n      };\n\n      /**\n       * Get visible items grouped by subgroup\n       * @param {function} orderFn An optional function to order items inside the subgroups\n       * @return {Object}\n       */\n      const getVisibleItemsGroupedBySubgroup = (orderFn) => {\n        let visibleSubgroupsItems = {};\n        for (const subgroup in this.subgroups) {\n          if (!Object.prototype.hasOwnProperty.call(this.subgroups, subgroup))\n            continue;\n          const items = this.visibleItems.filter(\n            (item) => item.data.subgroup === subgroup,\n          );\n          visibleSubgroupsItems[subgroup] = orderFn\n            ? items.sort((a, b) => orderFn(a.data, b.data))\n            : items;\n        }\n        return visibleSubgroupsItems;\n      };\n\n      if (typeof this.itemSet.options.order === \"function\") {\n        // a custom order function\n        //show all items\n        const me = this;\n        if (this.doInnerStack && this.itemSet.options.stackSubgroups) {\n          // Order the items within each subgroup\n          const visibleSubgroupsItems = getVisibleItemsGroupedBySubgroup(\n            this.itemSet.options.order,\n          );\n          stack.stackSubgroupsWithInnerStack(\n            visibleSubgroupsItems,\n            margin,\n            this.subgroups,\n          );\n          this.visibleItems = getVisibleItems();\n          this._updateSubGroupHeights(margin);\n        } else {\n          this.visibleItems = getVisibleItems();\n          this._updateSubGroupHeights(margin);\n          // order all items and force a restacking\n          // order all items outside clusters and force a restacking\n          const customOrderedItems = this.visibleItems\n            .slice()\n            .filter(\n              (item) => item.isCluster || (!item.isCluster && !item.cluster),\n            )\n            .sort((a, b) => {\n              return me.itemSet.options.order(a.data, b.data);\n            });\n          this.shouldBailStackItems = stack.stack(\n            customOrderedItems,\n            margin,\n            true,\n            this._shouldBailItemsRedraw.bind(this),\n          );\n        }\n      } else {\n        // no custom order function, lazy stacking\n        this.visibleItems = getVisibleItems();\n        this._updateSubGroupHeights(margin);\n\n        if (this.itemSet.options.stack) {\n          if (this.doInnerStack && this.itemSet.options.stackSubgroups) {\n            const visibleSubgroupsItems = getVisibleItemsGroupedBySubgroup();\n            stack.stackSubgroupsWithInnerStack(\n              visibleSubgroupsItems,\n              margin,\n              this.subgroups,\n            );\n          } else {\n            // TODO: ugly way to access options...\n            this.shouldBailStackItems = stack.stack(\n              this.visibleItems,\n              margin,\n              true,\n              this._shouldBailItemsRedraw.bind(this),\n            );\n          }\n        } else {\n          // no stacking\n          stack.nostack(\n            this.visibleItems,\n            margin,\n            this.subgroups,\n            this.itemSet.options.stackSubgroups,\n          );\n        }\n      }\n\n      for (let i = 0; i < this.visibleItems.length; i++) {\n        this.visibleItems[i].repositionX();\n        if (\n          this.subgroupVisibility[this.visibleItems[i].data.subgroup] !==\n          undefined\n        ) {\n          if (!this.subgroupVisibility[this.visibleItems[i].data.subgroup]) {\n            this.visibleItems[i].hide();\n          }\n        }\n      }\n\n      if (this.itemSet.options.cluster) {\n        util.forEach(this.items, (item) => {\n          if (item.cluster && item.displayed) {\n            item.hide();\n          }\n        });\n      }\n\n      if (this.shouldBailStackItems) {\n        this.itemSet.body.emitter.emit(\"destroyTimeline\");\n      }\n      this.stackDirty = false;\n    }\n  }\n\n  /**\n   * check if group resized\n   * @param {boolean} resized\n   * @param {number} height\n   * @return {boolean} did resize\n   */\n  _didResize(resized, height) {\n    resized = util.updateProperty(this, \"height\", height) || resized;\n    // recalculate size of label\n    const labelWidth = this.dom.inner.clientWidth;\n    const labelHeight = this.dom.inner.clientHeight;\n    resized =\n      util.updateProperty(this.props.label, \"width\", labelWidth) || resized;\n    resized =\n      util.updateProperty(this.props.label, \"height\", labelHeight) || resized;\n    return resized;\n  }\n\n  /**\n   * apply group height\n   * @param {number} height\n   */\n  _applyGroupHeight(height) {\n    this.dom.background.style.height = `${height}px`;\n    this.dom.foreground.style.height = `${height}px`;\n    this.dom.label.style.height = `${height}px`;\n  }\n\n  /**\n   * update vertical position of items after they are re-stacked and the height of the group is calculated\n   * @param {number} margin\n   */\n  _updateItemsVerticalPosition(margin) {\n    for (let i = 0, ii = this.visibleItems.length; i < ii; i++) {\n      const item = this.visibleItems[i];\n      item.repositionY(margin);\n      if (!this.isVisible && this.groupId != ReservedGroupIds.BACKGROUND) {\n        if (item.displayed) item.hide();\n      }\n    }\n  }\n\n  /**\n   * Repaint this group\n   * @param {{start: number, end: number}} range\n   * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n   * @param {boolean} [forceRestack=false]  Force restacking of all items\n   * @param {boolean} [returnQueue=false]  return the queue or if the group resized\n   * @return {boolean} Returns true if the group is resized or the redraw queue if returnQueue=true\n   */\n  redraw(range, margin, forceRestack, returnQueue) {\n    let resized = false;\n    const lastIsVisible = this.isVisible;\n    let height;\n\n    const queue = [\n      () => {\n        forceRestack = this._didMarkerHeightChange.call(this) || forceRestack;\n      },\n\n      // recalculate the height of the subgroups\n      this._updateSubGroupHeights.bind(this, margin),\n\n      // calculate actual size and position\n      this._calculateGroupSizeAndPosition.bind(this),\n\n      () => {\n        this.isVisible = this._isGroupVisible.bind(this)(range, margin);\n      },\n\n      () => {\n        this._redrawItems.bind(this)(\n          forceRestack,\n          lastIsVisible,\n          margin,\n          range,\n        );\n      },\n\n      // update subgroups\n      this._updateSubgroupsSizes.bind(this),\n\n      () => {\n        height = this.height = this._calculateHeight.bind(this)(margin);\n      },\n\n      // calculate actual size and position again\n      this._calculateGroupSizeAndPosition.bind(this),\n\n      () => {\n        resized = this._didResize.bind(this)(resized, height);\n      },\n\n      () => {\n        this._applyGroupHeight.bind(this)(height);\n      },\n\n      () => {\n        this._updateItemsVerticalPosition.bind(this)(margin);\n      },\n\n      (() => {\n        if (!this.isVisible && this.height) {\n          resized = false;\n        }\n        return resized;\n      }).bind(this),\n    ];\n\n    if (returnQueue) {\n      return queue;\n    } else {\n      let result;\n      queue.forEach((fn) => {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * recalculate the height of the subgroups\n   *\n   * @param {{item: timeline.Item}} margin\n   * @private\n   */\n  _updateSubGroupHeights(margin) {\n    if (Object.keys(this.subgroups).length > 0) {\n      const me = this;\n\n      this._resetSubgroups();\n\n      util.forEach(this.visibleItems, (item) => {\n        if (item.data.subgroup !== undefined) {\n          me.subgroups[item.data.subgroup].height = Math.max(\n            me.subgroups[item.data.subgroup].height,\n            item.height + margin.item.vertical,\n          );\n          me.subgroups[item.data.subgroup].visible =\n            typeof this.subgroupVisibility[item.data.subgroup] === \"undefined\"\n              ? true\n              : Boolean(this.subgroupVisibility[item.data.subgroup]);\n        }\n      });\n    }\n  }\n\n  /**\n   * check if group is visible\n   *\n   * @param {timeline.Range} range\n   * @param {{axis: timeline.DataAxis}} margin\n   * @returns {boolean} is visible\n   * @private\n   */\n  _isGroupVisible(range, margin) {\n    return (\n      this.top <=\n        range.body.domProps.centerContainer.height -\n          range.body.domProps.scrollTop +\n          margin.axis &&\n      this.top + this.height + margin.axis >= -range.body.domProps.scrollTop\n    );\n  }\n\n  /**\n   * recalculate the height of the group\n   * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n   * @returns {number} Returns the height\n   * @private\n   */\n  _calculateHeight(margin) {\n    // recalculate the height of the group\n    let height;\n\n    let items;\n\n    if (this.heightMode === \"fixed\") {\n      items = util.toArray(this.items);\n    } else {\n      // default or 'auto'\n      items = this.visibleItems;\n    }\n\n    if (!this.isVisible && this.height) {\n      height = Math.max(this.height, this.props.label.height);\n    } else if (items.length > 0) {\n      let min = items[0].top;\n      let max = items[0].top + items[0].height;\n      util.forEach(items, (item) => {\n        min = Math.min(min, item.top);\n        max = Math.max(max, item.top + item.height);\n      });\n      if (min > margin.axis) {\n        // there is an empty gap between the lowest item and the axis\n        const offset = min - margin.axis;\n        max -= offset;\n        util.forEach(items, (item) => {\n          item.top -= offset;\n        });\n      }\n      height = Math.ceil(max + margin.item.vertical / 2);\n      if (this.heightMode !== \"fitItems\") {\n        height = Math.max(height, this.props.label.height);\n      }\n    } else {\n      height = 0 || this.props.label.height;\n    }\n    return height;\n  }\n\n  /**\n   * Show this group: attach to the DOM\n   */\n  show() {\n    if (!this.dom.label.parentNode) {\n      this.itemSet.dom.labelSet.appendChild(this.dom.label);\n    }\n\n    if (!this.dom.foreground.parentNode) {\n      this.itemSet.dom.foreground.appendChild(this.dom.foreground);\n    }\n\n    if (!this.dom.background.parentNode) {\n      this.itemSet.dom.background.appendChild(this.dom.background);\n    }\n\n    if (!this.dom.axis.parentNode) {\n      this.itemSet.dom.axis.appendChild(this.dom.axis);\n    }\n  }\n\n  /**\n   * Hide this group: remove from the DOM\n   */\n  hide() {\n    const label = this.dom.label;\n    if (label.parentNode) {\n      label.parentNode.removeChild(label);\n    }\n\n    const foreground = this.dom.foreground;\n    if (foreground.parentNode) {\n      foreground.parentNode.removeChild(foreground);\n    }\n\n    const background = this.dom.background;\n    if (background.parentNode) {\n      background.parentNode.removeChild(background);\n    }\n\n    const axis = this.dom.axis;\n    if (axis.parentNode) {\n      axis.parentNode.removeChild(axis);\n    }\n  }\n\n  /**\n   * Add an item to the group\n   * @param {Item} item\n   */\n  add(item) {\n    this.items[item.id] = item;\n    item.setParent(this);\n    this.stackDirty = true;\n    // add to\n    if (item.data.subgroup !== undefined) {\n      this._addToSubgroup(item);\n      this.orderSubgroups();\n    }\n\n    if (!this.visibleItems.includes(item)) {\n      const range = this.itemSet.body.range; // TODO: not nice accessing the range like this\n      this._checkIfVisible(item, this.visibleItems, range);\n    }\n  }\n\n  /**\n   * add item to subgroup\n   * @param {object} item\n   * @param {string} subgroupId\n   */\n  _addToSubgroup(item, subgroupId = item.data.subgroup) {\n    if (subgroupId != undefined && this.subgroups[subgroupId] === undefined) {\n      this.subgroups[subgroupId] = {\n        height: 0,\n        top: 0,\n        start: item.data.start,\n        end: item.data.end || item.data.start,\n        visible: false,\n        index: this.subgroupIndex,\n        items: [],\n        stack: this.subgroupStackAll || this.subgroupStack[subgroupId] || false,\n      };\n      this.subgroupIndex++;\n    }\n\n    if (\n      new Date(item.data.start) < new Date(this.subgroups[subgroupId].start)\n    ) {\n      this.subgroups[subgroupId].start = item.data.start;\n    }\n\n    const itemEnd = item.data.end || item.data.start;\n    if (new Date(itemEnd) > new Date(this.subgroups[subgroupId].end)) {\n      this.subgroups[subgroupId].end = itemEnd;\n    }\n\n    this.subgroups[subgroupId].items.push(item);\n  }\n\n  /**\n   * update subgroup sizes\n   */\n  _updateSubgroupsSizes() {\n    const me = this;\n    if (me.subgroups) {\n      for (const subgroup in me.subgroups) {\n        if (!Object.prototype.hasOwnProperty.call(me.subgroups, subgroup))\n          continue;\n\n        const initialEnd =\n          me.subgroups[subgroup].items[0].data.end ||\n          me.subgroups[subgroup].items[0].data.start;\n        let newStart = me.subgroups[subgroup].items[0].data.start;\n        let newEnd = initialEnd - 1;\n\n        me.subgroups[subgroup].items.forEach((item) => {\n          if (new Date(item.data.start) < new Date(newStart)) {\n            newStart = item.data.start;\n          }\n\n          const itemEnd = item.data.end || item.data.start;\n          if (new Date(itemEnd) > new Date(newEnd)) {\n            newEnd = itemEnd;\n          }\n        });\n\n        me.subgroups[subgroup].start = newStart;\n        me.subgroups[subgroup].end = new Date(newEnd - 1); // -1 to compensate for colliding end to start subgroups;\n      }\n    }\n  }\n\n  /**\n   * order subgroups\n   */\n  orderSubgroups() {\n    if (this.subgroupOrderer !== undefined) {\n      const sortArray = [];\n      if (typeof this.subgroupOrderer == \"string\") {\n        for (const subgroup in this.subgroups) {\n          if (!Object.prototype.hasOwnProperty.call(this.subgroups, subgroup))\n            continue;\n          sortArray.push({\n            subgroup,\n            sortField:\n              this.subgroups[subgroup].items[0].data[this.subgroupOrderer],\n          });\n        }\n        sortArray.sort((a, b) => a.sortField - b.sortField);\n      } else if (typeof this.subgroupOrderer == \"function\") {\n        for (const subgroup in this.subgroups) {\n          if (!Object.prototype.hasOwnProperty.call(this.subgroups, subgroup))\n            continue;\n          sortArray.push(this.subgroups[subgroup].items[0].data);\n        }\n        sortArray.sort(this.subgroupOrderer);\n      }\n\n      if (sortArray.length > 0) {\n        for (let i = 0; i < sortArray.length; i++) {\n          this.subgroups[sortArray[i].subgroup].index = i;\n        }\n      }\n    }\n  }\n\n  /**\n   * add item to subgroup\n   */\n  _resetSubgroups() {\n    for (const subgroup in this.subgroups) {\n      if (!Object.prototype.hasOwnProperty.call(this.subgroups, subgroup))\n        continue;\n      this.subgroups[subgroup].visible = false;\n      this.subgroups[subgroup].height = 0;\n    }\n  }\n\n  /**\n   * Remove an item from the group\n   * @param {Item} item\n   */\n  remove(item) {\n    delete this.items[item.id];\n    item.setParent(null);\n    this.stackDirty = true;\n\n    // remove from visible items\n    const index = this.visibleItems.indexOf(item);\n    if (index != -1) this.visibleItems.splice(index, 1);\n\n    if (item.data.subgroup !== undefined) {\n      this._removeFromSubgroup(item);\n      this.orderSubgroups();\n    }\n  }\n\n  /**\n   * remove item from subgroup\n   * @param {object} item\n   * @param {string} subgroupId\n   */\n  _removeFromSubgroup(item, subgroupId = item.data.subgroup) {\n    if (subgroupId != undefined) {\n      const subgroup = this.subgroups[subgroupId];\n      if (subgroup) {\n        const itemIndex = subgroup.items.indexOf(item);\n        //  Check the item is actually in this subgroup. How should items not in the group be handled?\n        if (itemIndex >= 0) {\n          subgroup.items.splice(itemIndex, 1);\n          if (!subgroup.items.length) {\n            delete this.subgroups[subgroupId];\n          } else {\n            this._updateSubgroupsSizes();\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Remove an item from the corresponding DataSet\n   * @param {Item} item\n   */\n  removeFromDataSet(item) {\n    this.itemSet.removeItem(item.id);\n  }\n\n  /**\n   * Reorder the items\n   */\n  order() {\n    const array = util.toArray(this.items);\n    const startArray = [];\n    const endArray = [];\n\n    for (let i = 0; i < array.length; i++) {\n      if (array[i].data.end !== undefined) {\n        endArray.push(array[i]);\n      }\n      startArray.push(array[i]);\n    }\n    this.orderedItems = {\n      byStart: startArray,\n      byEnd: endArray,\n    };\n\n    stack.orderByStart(this.orderedItems.byStart);\n    stack.orderByEnd(this.orderedItems.byEnd);\n  }\n\n  /**\n   * Update the visible items\n   * @param {{byStart: Item[], byEnd: Item[]}} orderedItems   All items ordered by start date and by end date\n   * @param {Item[]} oldVisibleItems                          The previously visible items.\n   * @param {{start: number, end: number}} range              Visible range\n   * @return {Item[]} visibleItems                            The new visible items.\n   * @private\n   */\n  _updateItemsInRange(orderedItems, oldVisibleItems, range) {\n    const visibleItems = [];\n    const visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems\n\n    if (\n      !this.isVisible &&\n      this.height !== undefined &&\n      this.groupId != ReservedGroupIds.BACKGROUND\n    ) {\n      for (let i = 0; i < oldVisibleItems.length; i++) {\n        var item = oldVisibleItems[i];\n        if (item.displayed) item.hide();\n      }\n      return visibleItems;\n    }\n\n    const interval = (range.end - range.start) / 4;\n    const lowerBound = range.start - interval;\n    const upperBound = range.end + interval;\n\n    // this function is used to do the binary search for items having start date only.\n    const startSearchFunction = (value) => {\n      if (value < lowerBound) {\n        return -1;\n      } else if (value <= upperBound) {\n        return 0;\n      } else {\n        return 1;\n      }\n    };\n\n    // this function is used to do the binary search for items having start and end dates (range).\n    const endSearchFunction = (data) => {\n      const { start, end } = data;\n      if (end < lowerBound) {\n        return -1;\n      } else if (start <= upperBound) {\n        return 0;\n      } else {\n        return 1;\n      }\n    };\n\n    // first check if the items that were in view previously are still in view.\n    // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window!\n    // also cleans up invisible items.\n    if (oldVisibleItems.length > 0) {\n      for (let i = 0; i < oldVisibleItems.length; i++) {\n        this._checkIfVisibleWithReference(\n          oldVisibleItems[i],\n          visibleItems,\n          visibleItemsLookup,\n          range,\n        );\n      }\n    }\n\n    // we do a binary search for the items that have only start values.\n    const initialPosByStart = util.binarySearchCustom(\n      orderedItems.byStart,\n      startSearchFunction,\n      \"data\",\n      \"start\",\n    );\n\n    // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values.\n    this._traceVisible(\n      initialPosByStart,\n      orderedItems.byStart,\n      visibleItems,\n      visibleItemsLookup,\n      (item) => item.data.start < lowerBound || item.data.start > upperBound,\n    );\n\n    // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown.\n    // We therefore have to brute force check all items in the byEnd list\n    if (this.checkRangedItems == true) {\n      this.checkRangedItems = false;\n      for (let i = 0; i < orderedItems.byEnd.length; i++) {\n        this._checkIfVisibleWithReference(\n          orderedItems.byEnd[i],\n          visibleItems,\n          visibleItemsLookup,\n          range,\n        );\n      }\n    } else {\n      // we do a binary search for the items that have defined end times.\n      const initialPosByEnd = util.binarySearchCustom(\n        orderedItems.byEnd,\n        endSearchFunction,\n        \"data\",\n      );\n\n      // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values.\n      this._traceVisible(\n        initialPosByEnd,\n        orderedItems.byEnd,\n        visibleItems,\n        visibleItemsLookup,\n        (item) => item.data.end < lowerBound || item.data.start > upperBound,\n      );\n    }\n\n    this._sortVisibleItems(\n      orderedItems.byStart,\n      visibleItems,\n      visibleItemsLookup,\n    );\n\n    const redrawQueue = {};\n    let redrawQueueLength = 0;\n\n    for (let i = 0; i < visibleItems.length; i++) {\n      const item = visibleItems[i];\n      if (!item.displayed) {\n        const returnQueue = true;\n        redrawQueue[i] = item.redraw(returnQueue);\n        redrawQueueLength = redrawQueue[i].length;\n      }\n    }\n\n    const needRedraw = redrawQueueLength > 0;\n    if (needRedraw) {\n      // redraw all regular items\n      for (let j = 0; j < redrawQueueLength; j++) {\n        util.forEach(redrawQueue, (fns) => {\n          fns[j]();\n        });\n      }\n    }\n\n    for (let i = 0; i < visibleItems.length; i++) {\n      visibleItems[i].repositionX();\n    }\n\n    return visibleItems;\n  }\n\n  /**\n   * trace visible items in group\n   * @param {number} initialPos\n   * @param {array} items\n   * @param {aray} visibleItems\n   * @param {object} visibleItemsLookup\n   * @param {function} breakCondition\n   */\n  _traceVisible(\n    initialPos,\n    items,\n    visibleItems,\n    visibleItemsLookup,\n    breakCondition,\n  ) {\n    if (initialPos != -1) {\n      for (let i = initialPos; i >= 0; i--) {\n        let item = items[i];\n        if (breakCondition(item)) {\n          break;\n        } else {\n          if (!(item.isCluster && !item.hasItems()) && !item.cluster) {\n            if (visibleItemsLookup[item.id] === undefined) {\n              visibleItemsLookup[item.id] = true;\n              visibleItems.unshift(item);\n            }\n          }\n        }\n      }\n\n      for (let i = initialPos + 1; i < items.length; i++) {\n        let item = items[i];\n        if (breakCondition(item)) {\n          break;\n        } else {\n          if (!(item.isCluster && !item.hasItems()) && !item.cluster) {\n            if (visibleItemsLookup[item.id] === undefined) {\n              visibleItemsLookup[item.id] = true;\n              visibleItems.push(item);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * by-ref reordering of visibleItems array to match\n   * the specified item superset order\n   * @param {array} orderedItems\n   * @param {aray} visibleItems\n   * @param {object} visibleItemsLookup\n   */\n  _sortVisibleItems(orderedItems, visibleItems, visibleItemsLookup) {\n    visibleItems.length = 0; // Clear visibleItems array in-place\n    for (let i = 0; i < orderedItems.length; i++) {\n      let item = orderedItems[i];\n      if (visibleItemsLookup[item.id]) {\n        visibleItems.push(item);\n      }\n    }\n  }\n\n  /**\n   * this function is very similar to the _checkIfInvisible() but it does not\n   * return booleans, hides the item if it should not be seen and always adds to\n   * the visibleItems.\n   * this one is for brute forcing and hiding.\n   *\n   * @param {Item} item\n   * @param {Array} visibleItems\n   * @param {{start:number, end:number}} range\n   * @private\n   */\n  _checkIfVisible(item, visibleItems, range) {\n    if (item.isVisible(range)) {\n      if (!item.displayed) item.show();\n      // reposition item horizontally\n      item.repositionX();\n      visibleItems.push(item);\n    } else {\n      if (item.displayed) item.hide();\n    }\n  }\n\n  /**\n   * this function is very similar to the _checkIfInvisible() but it does not\n   * return booleans, hides the item if it should not be seen and always adds to\n   * the visibleItems.\n   * this one is for brute forcing and hiding.\n   *\n   * @param {Item} item\n   * @param {Array.<timeline.Item>} visibleItems\n   * @param {Object<number, boolean>} visibleItemsLookup\n   * @param {{start:number, end:number}} range\n   * @private\n   */\n  _checkIfVisibleWithReference(item, visibleItems, visibleItemsLookup, range) {\n    if (item.isVisible(range)) {\n      if (visibleItemsLookup[item.id] === undefined) {\n        visibleItemsLookup[item.id] = true;\n        visibleItems.push(item);\n      }\n    } else {\n      if (item.displayed) item.hide();\n    }\n  }\n\n  /**\n   * Update the visible items\n   * @param {array} orderedClusters\n   * @param {array} oldVisibleClusters\n   * @param {{start: number, end: number}} range\n   * @return {Item[]} visibleItems\n   * @private\n   */\n  _updateClustersInRange(orderedClusters, oldVisibleClusters, range) {\n    // Clusters can overlap each other so we cannot use binary search here\n    const visibleClusters = [];\n    const visibleClustersLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems\n\n    if (oldVisibleClusters.length > 0) {\n      for (let i = 0; i < oldVisibleClusters.length; i++) {\n        this._checkIfVisibleWithReference(\n          oldVisibleClusters[i],\n          visibleClusters,\n          visibleClustersLookup,\n          range,\n        );\n      }\n    }\n\n    for (let i = 0; i < orderedClusters.byStart.length; i++) {\n      this._checkIfVisibleWithReference(\n        orderedClusters.byStart[i],\n        visibleClusters,\n        visibleClustersLookup,\n        range,\n      );\n    }\n\n    for (let i = 0; i < orderedClusters.byEnd.length; i++) {\n      this._checkIfVisibleWithReference(\n        orderedClusters.byEnd[i],\n        visibleClusters,\n        visibleClustersLookup,\n        range,\n      );\n    }\n\n    const redrawQueue = {};\n    let redrawQueueLength = 0;\n\n    for (let i = 0; i < visibleClusters.length; i++) {\n      const item = visibleClusters[i];\n      if (!item.displayed) {\n        const returnQueue = true;\n        redrawQueue[i] = item.redraw(returnQueue);\n        redrawQueueLength = redrawQueue[i].length;\n      }\n    }\n\n    const needRedraw = redrawQueueLength > 0;\n    if (needRedraw) {\n      // redraw all regular items\n      for (var j = 0; j < redrawQueueLength; j++) {\n        util.forEach(redrawQueue, function (fns) {\n          fns[j]();\n        });\n      }\n    }\n\n    for (let i = 0; i < visibleClusters.length; i++) {\n      visibleClusters[i].repositionX();\n    }\n\n    return visibleClusters;\n  }\n\n  /**\n   * change item subgroup\n   * @param {object} item\n   * @param {string} oldSubgroup\n   * @param {string} newSubgroup\n   */\n  changeSubgroup(item, oldSubgroup, newSubgroup) {\n    this._removeFromSubgroup(item, oldSubgroup);\n    this._addToSubgroup(item, newSubgroup);\n    this.orderSubgroups();\n  }\n\n  /**\n   * Call this method before you lose the last reference to an instance of this.\n   * It will remove listeners etc.\n   */\n  dispose() {\n    this.hide();\n\n    let disposeCallback;\n    while ((disposeCallback = this._disposeCallbacks.pop())) {\n      disposeCallback();\n    }\n  }\n}\n\nexport default Group;\n", "import Group from \"./Group.js\";\n\n/**\n * @constructor BackgroundGroup\n * @extends Group\n */\nclass BackgroundGroup extends Group {\n  /**\n   * @param {number | string} groupId\n   * @param {Object} data\n   * @param {ItemSet} itemSet\n   */\n  constructor(groupId, data, itemSet) {\n    super(groupId, data, itemSet);\n    // Group.call(this, groupId, data, itemSet);\n\n    this.width = 0;\n    this.height = 0;\n    this.top = 0;\n    this.left = 0;\n  }\n\n  /**\n   * Repaint this group\n   * @param {{start: number, end: number}} range\n   * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n   * @return {boolean} Returns true if the group is resized\n   */\n  redraw(range, margin) {\n    const resized = false;\n\n    this.visibleItems = this._updateItemsInRange(\n      this.orderedItems,\n      this.visibleItems,\n      range,\n    );\n\n    // calculate actual size\n    this.width = this.dom.background.offsetWidth;\n\n    // apply new height (just always zero for BackgroundGroup\n    this.dom.background.style.height = \"0\";\n\n    // update vertical position of items after they are re-stacked and the height of the group is calculated\n    for (let i = 0, ii = this.visibleItems.length; i < ii; i++) {\n      const item = this.visibleItems[i];\n      item.repositionY(margin);\n    }\n\n    return resized;\n  }\n\n  /**\n   * Show this group: attach to the DOM\n   */\n  show() {\n    if (!this.dom.background.parentNode) {\n      this.itemSet.dom.background.appendChild(this.dom.background);\n    }\n  }\n}\n\nexport default BackgroundGroup;\n", "import Hammer from \"../../../module/hammer.js\";\nimport util from \"../../../util.js\";\nimport moment from \"../../../module/moment.js\";\nimport locales from \"../../locales.js\";\n\n/**\n * Item\n */\nclass Item {\n  /**\n   * @constructor Item\n   * @param {Object} data             Object containing (optional) parameters type,\n   *                                  start, end, content, group, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} options          Configuration options\n   *                                  // TODO: describe available options\n   */\n  constructor(data, conversion, options) {\n    this.id = null;\n    this.parent = null;\n    this.data = data;\n    this.dom = null;\n    this.conversion = conversion || {};\n    this.defaultOptions = {\n      locales,\n      locale: \"en\",\n    };\n    this.options = util.extend({}, this.defaultOptions, options);\n    this.options.locales = util.extend({}, locales, this.options.locales);\n    const defaultLocales =\n      this.defaultOptions.locales[this.defaultOptions.locale];\n    Object.keys(this.options.locales).forEach((locale) => {\n      this.options.locales[locale] = util.extend(\n        {},\n        defaultLocales,\n        this.options.locales[locale],\n      );\n    });\n    this.selected = false;\n    this.displayed = false;\n    this.groupShowing = true;\n    this.selectable = (options && options.selectable) || false;\n    this.dirty = true;\n\n    this.top = null;\n    this.right = null;\n    this.left = null;\n    this.width = null;\n    this.height = null;\n\n    this.setSelectability(data);\n\n    this.editable = null;\n    this._updateEditStatus();\n  }\n\n  /**\n   * Select current item\n   */\n  select() {\n    if (this.selectable) {\n      this.selected = true;\n      this.dirty = true;\n      if (this.displayed) this.redraw();\n    }\n  }\n\n  /**\n   * Unselect current item\n   */\n  unselect() {\n    this.selected = false;\n    this.dirty = true;\n    if (this.displayed) this.redraw();\n  }\n\n  /**\n   * Set data for the item. Existing data will be updated. The id should not\n   * be changed. When the item is displayed, it will be redrawn immediately.\n   * @param {Object} data\n   */\n  setData(data) {\n    const groupChanged =\n      data.group != undefined && this.data.group != data.group;\n    if (groupChanged && this.parent != null) {\n      this.parent.itemSet._moveToGroup(this, data.group);\n    }\n\n    this.setSelectability(data);\n\n    if (this.parent) {\n      this.parent.stackDirty = true;\n    }\n\n    const subGroupChanged =\n      data.subgroup != undefined && this.data.subgroup != data.subgroup;\n    if (subGroupChanged && this.parent != null) {\n      this.parent.changeSubgroup(this, this.data.subgroup, data.subgroup);\n    }\n\n    this.data = data;\n    this._updateEditStatus();\n    this.dirty = true;\n    if (this.displayed) this.redraw();\n  }\n\n  /**\n   * Set whether the item can be selected.\n   * Can only be set/unset if the timeline's `selectable` configuration option is `true`.\n   * @param {Object} data `data` from `constructor` and `setData`\n   */\n  setSelectability(data) {\n    if (data) {\n      this.selectable =\n        typeof data.selectable === \"undefined\"\n          ? true\n          : Boolean(data.selectable);\n    }\n  }\n\n  /**\n   * Set a parent for the item\n   * @param {Group} parent\n   */\n  setParent(parent) {\n    if (this.displayed) {\n      this.hide();\n      this.parent = parent;\n      if (this.parent) {\n        this.show();\n      }\n    } else {\n      this.parent = parent;\n    }\n  }\n\n  /**\n   * Check whether this item is visible inside given range\n   * @returns {boolean} True if visible\n   */\n  isVisible() {\n    return false;\n  }\n\n  /**\n   * Show the Item in the DOM (when not already visible)\n   * @return {Boolean} changed\n   */\n  show() {\n    return false;\n  }\n\n  /**\n   * Hide the Item from the DOM (when visible)\n   * @return {Boolean} changed\n   */\n  hide() {\n    return false;\n  }\n\n  /**\n   * Repaint the item\n   */\n  redraw() {\n    // should be implemented by the item\n  }\n\n  /**\n   * Reposition the Item horizontally\n   */\n  repositionX() {\n    // should be implemented by the item\n  }\n\n  /**\n   * Reposition the Item vertically\n   */\n  repositionY() {\n    // should be implemented by the item\n  }\n\n  /**\n   * Repaint a drag area on the center of the item when the item is selected\n   * @protected\n   */\n  _repaintDragCenter() {\n    if (this.selected && this.editable.updateTime && !this.dom.dragCenter) {\n      const me = this;\n      // create and show drag area\n      const dragCenter = document.createElement(\"div\");\n      dragCenter.className = \"vis-drag-center\";\n      dragCenter.dragCenterItem = this;\n      this.hammerDragCenter = new Hammer(dragCenter);\n\n      this.hammerDragCenter.on(\"tap\", (event) => {\n        me.parent.itemSet.body.emitter.emit(\"click\", {\n          event,\n          item: me.id,\n        });\n      });\n      this.hammerDragCenter.on(\"doubletap\", (event) => {\n        event.stopPropagation();\n        me.parent.itemSet._onUpdateItem(me);\n        me.parent.itemSet.body.emitter.emit(\"doubleClick\", {\n          event,\n          item: me.id,\n        });\n      });\n      this.hammerDragCenter.on(\"panstart\", (event) => {\n        // do not allow this event to propagate to the Range\n        event.stopPropagation();\n        me.parent.itemSet._onDragStart(event);\n      });\n      this.hammerDragCenter.on(\n        \"panmove\",\n        me.parent.itemSet._onDrag.bind(me.parent.itemSet),\n      );\n      this.hammerDragCenter.on(\n        \"panend\",\n        me.parent.itemSet._onDragEnd.bind(me.parent.itemSet),\n      );\n      // delay addition on item click for trackpads...\n      this.hammerDragCenter.get(\"press\").set({ time: 10000 });\n\n      if (this.dom.box) {\n        if (this.dom.dragLeft) {\n          this.dom.box.insertBefore(dragCenter, this.dom.dragLeft);\n        } else {\n          this.dom.box.appendChild(dragCenter);\n        }\n      } else if (this.dom.point) {\n        this.dom.point.appendChild(dragCenter);\n      }\n\n      this.dom.dragCenter = dragCenter;\n    } else if (!this.selected && this.dom.dragCenter) {\n      // delete drag area\n      if (this.dom.dragCenter.parentNode) {\n        this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter);\n      }\n      this.dom.dragCenter = null;\n\n      if (this.hammerDragCenter) {\n        this.hammerDragCenter.destroy();\n        this.hammerDragCenter = null;\n      }\n    }\n  }\n\n  /**\n   * Repaint a delete button on the top right of the item when the item is selected\n   * @param {HTMLElement} anchor\n   * @protected\n   */\n  _repaintDeleteButton(anchor) {\n    const editable =\n      ((this.options.editable.overrideItems || this.editable == null) &&\n        this.options.editable.remove) ||\n      (!this.options.editable.overrideItems &&\n        this.editable != null &&\n        this.editable.remove);\n\n    if (this.selected && editable && !this.dom.deleteButton) {\n      // create and show button\n      const me = this;\n\n      const deleteButton = document.createElement(\"div\");\n\n      if (this.options.rtl) {\n        deleteButton.className = \"vis-delete-rtl\";\n      } else {\n        deleteButton.className = \"vis-delete\";\n      }\n      let optionsLocale = this.options.locales[this.options.locale];\n      if (!optionsLocale) {\n        if (!this.warned) {\n          console.warn(\n            `WARNING: options.locales['${this.options.locale}'] not found. See https://visjs.github.io/vis-timeline/docs/timeline/#Localization`,\n          );\n          this.warned = true;\n        }\n        optionsLocale = this.options.locales[\"en\"]; // fall back on english when not available\n      }\n      deleteButton.title = optionsLocale.deleteSelected;\n\n      // TODO: be able to destroy the delete button\n      this.hammerDeleteButton = new Hammer(deleteButton).on(\"tap\", (event) => {\n        event.stopPropagation();\n        me.parent.removeFromDataSet(me);\n      });\n\n      anchor.appendChild(deleteButton);\n      this.dom.deleteButton = deleteButton;\n    } else if ((!this.selected || !editable) && this.dom.deleteButton) {\n      // remove button\n      if (this.dom.deleteButton.parentNode) {\n        this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton);\n      }\n      this.dom.deleteButton = null;\n\n      if (this.hammerDeleteButton) {\n        this.hammerDeleteButton.destroy();\n        this.hammerDeleteButton = null;\n      }\n    }\n  }\n\n  /**\n   * Repaint a onChange tooltip on the top right of the item when the item is selected\n   * @param {HTMLElement} anchor\n   * @protected\n   */\n  _repaintOnItemUpdateTimeTooltip(anchor) {\n    if (!this.options.tooltipOnItemUpdateTime) return;\n\n    const editable =\n      (this.options.editable.updateTime || this.data.editable === true) &&\n      this.data.editable !== false;\n\n    if (this.selected && editable && !this.dom.onItemUpdateTimeTooltip) {\n      const onItemUpdateTimeTooltip = document.createElement(\"div\");\n\n      onItemUpdateTimeTooltip.className = \"vis-onUpdateTime-tooltip\";\n      anchor.appendChild(onItemUpdateTimeTooltip);\n      this.dom.onItemUpdateTimeTooltip = onItemUpdateTimeTooltip;\n    } else if (!this.selected && this.dom.onItemUpdateTimeTooltip) {\n      // remove button\n      if (this.dom.onItemUpdateTimeTooltip.parentNode) {\n        this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(\n          this.dom.onItemUpdateTimeTooltip,\n        );\n      }\n      this.dom.onItemUpdateTimeTooltip = null;\n    }\n\n    // position onChange tooltip\n    if (this.dom.onItemUpdateTimeTooltip) {\n      // only show when editing\n      this.dom.onItemUpdateTimeTooltip.style.visibility = this.parent.itemSet\n        .touchParams.itemIsDragging\n        ? \"visible\"\n        : \"hidden\";\n\n      // position relative to item's content\n      this.dom.onItemUpdateTimeTooltip.style.transform = \"translateX(-50%)\";\n      this.dom.onItemUpdateTimeTooltip.style.left = \"50%\";\n\n      // position above or below the item depending on the item's position in the window\n      const tooltipOffset = 50; // TODO: should be tooltip height (depends on template)\n      const scrollTop = this.parent.itemSet.body.domProps.scrollTop;\n\n      // TODO: this.top for orientation:true is actually the items distance from the bottom...\n      // (should be this.bottom)\n      let itemDistanceFromTop;\n      if (this.options.orientation.item == \"top\") {\n        itemDistanceFromTop = this.top;\n      } else {\n        itemDistanceFromTop = this.parent.height - this.top - this.height;\n      }\n      const isCloseToTop =\n        itemDistanceFromTop + this.parent.top - tooltipOffset < -scrollTop;\n\n      if (isCloseToTop) {\n        this.dom.onItemUpdateTimeTooltip.style.bottom = \"\";\n        this.dom.onItemUpdateTimeTooltip.style.top = `${this.height + 2}px`;\n      } else {\n        this.dom.onItemUpdateTimeTooltip.style.top = \"\";\n        this.dom.onItemUpdateTimeTooltip.style.bottom = `${this.height + 2}px`;\n      }\n\n      // handle tooltip content\n      let content;\n      let templateFunction;\n\n      if (\n        this.options.tooltipOnItemUpdateTime &&\n        this.options.tooltipOnItemUpdateTime.template\n      ) {\n        templateFunction =\n          this.options.tooltipOnItemUpdateTime.template.bind(this);\n        content = templateFunction(this.data);\n      } else {\n        content = `start: ${moment(this.data.start).format(\"MM/DD/YYYY hh:mm\")}`;\n        if (this.data.end) {\n          content += `<br> end: ${moment(this.data.end).format(\"MM/DD/YYYY hh:mm\")}`;\n        }\n      }\n      this.dom.onItemUpdateTimeTooltip.innerHTML = util.xss(content);\n    }\n  }\n\n  /**\n   * get item data\n   * @return {object}\n   * @private\n   */\n  _getItemData() {\n    return this.parent.itemSet.itemsData.get(this.id);\n  }\n\n  /**\n   * Set HTML contents for the item\n   * @param {Element} element   HTML element to fill with the contents\n   * @private\n   */\n  _updateContents(element) {\n    let content;\n    let changed;\n    let templateFunction;\n    let itemVisibleFrameContent;\n    let visibleFrameTemplateFunction;\n    const itemData = this._getItemData(); // get a clone of the data from the dataset\n\n    const frameElement = this.dom.box || this.dom.point;\n    const itemVisibleFrameContentElement = frameElement.getElementsByClassName(\n      \"vis-item-visible-frame\",\n    )[0];\n\n    if (this.options.visibleFrameTemplate) {\n      visibleFrameTemplateFunction =\n        this.options.visibleFrameTemplate.bind(this);\n      itemVisibleFrameContent = util.xss(\n        visibleFrameTemplateFunction(itemData, itemVisibleFrameContentElement),\n      );\n    } else {\n      itemVisibleFrameContent = \"\";\n    }\n\n    if (itemVisibleFrameContentElement) {\n      if (\n        itemVisibleFrameContent instanceof Object &&\n        !(itemVisibleFrameContent instanceof Element)\n      ) {\n        visibleFrameTemplateFunction(itemData, itemVisibleFrameContentElement);\n      } else {\n        changed =\n          this._contentToString(this.itemVisibleFrameContent) !==\n          this._contentToString(itemVisibleFrameContent);\n        if (changed) {\n          // only replace the content when changed\n          if (itemVisibleFrameContent instanceof Element) {\n            itemVisibleFrameContentElement.innerHTML = \"\";\n            itemVisibleFrameContentElement.appendChild(itemVisibleFrameContent);\n          } else if (itemVisibleFrameContent != undefined) {\n            itemVisibleFrameContentElement.innerHTML = util.xss(\n              itemVisibleFrameContent,\n            );\n          } else {\n            if (\n              !(\n                this.data.type == \"background\" &&\n                this.data.content === undefined\n              )\n            ) {\n              throw new Error(`Property \"content\" missing in item ${this.id}`);\n            }\n          }\n\n          this.itemVisibleFrameContent = itemVisibleFrameContent;\n        }\n      }\n    }\n\n    if (this.options.template) {\n      templateFunction = this.options.template.bind(this);\n      content = templateFunction(itemData, element, this.data);\n    } else {\n      content = this.data.content;\n    }\n\n    if (content instanceof Object && !(content instanceof Element)) {\n      templateFunction(itemData, element);\n    } else {\n      changed =\n        this._contentToString(this.content) !== this._contentToString(content);\n      if (changed) {\n        // only replace the content when changed\n        if (content instanceof Element) {\n          element.innerHTML = \"\";\n          element.appendChild(content);\n        } else if (content != undefined) {\n          element.innerHTML = util.xss(content);\n        } else {\n          if (\n            !(this.data.type == \"background\" && this.data.content === undefined)\n          ) {\n            throw new Error(`Property \"content\" missing in item ${this.id}`);\n          }\n        }\n        this.content = content;\n      }\n    }\n  }\n\n  /**\n   * Process dataAttributes timeline option and set as data- attributes on dom.content\n   * @param {Element} element   HTML element to which the attributes will be attached\n   * @private\n   */\n  _updateDataAttributes(element) {\n    if (this.options.dataAttributes && this.options.dataAttributes.length > 0) {\n      let attributes = [];\n\n      if (Array.isArray(this.options.dataAttributes)) {\n        attributes = this.options.dataAttributes;\n      } else if (this.options.dataAttributes == \"all\") {\n        attributes = Object.keys(this.data);\n      } else {\n        return;\n      }\n\n      for (const name of attributes) {\n        const value = this.data[name];\n\n        if (value != null) {\n          element.setAttribute(`data-${name}`, value);\n        } else {\n          element.removeAttribute(`data-${name}`);\n        }\n      }\n    }\n  }\n\n  /**\n   * Update custom styles of the element\n   * @param {Element} element\n   * @private\n   */\n  _updateStyle(element) {\n    // remove old styles\n    if (this.style) {\n      util.removeCssText(element, this.style);\n      this.style = null;\n    }\n\n    // append new styles\n    if (this.data.style) {\n      util.addCssText(element, this.data.style);\n      this.style = this.data.style;\n    }\n  }\n\n  /**\n   * Stringify the items contents\n   * @param {string | Element | undefined} content\n   * @returns {string | undefined}\n   * @private\n   */\n  _contentToString(content) {\n    if (typeof content === \"string\") return content;\n    if (content && \"outerHTML\" in content) return content.outerHTML;\n    return content;\n  }\n\n  /**\n   * Update the editability of this item.\n   */\n  _updateEditStatus() {\n    if (this.options) {\n      if (typeof this.options.editable === \"boolean\") {\n        this.editable = {\n          updateTime: this.options.editable,\n          updateGroup: this.options.editable,\n          remove: this.options.editable,\n        };\n      } else if (typeof this.options.editable === \"object\") {\n        this.editable = {};\n        util.selectiveExtend(\n          [\"updateTime\", \"updateGroup\", \"remove\"],\n          this.editable,\n          this.options.editable,\n        );\n      }\n    }\n    // Item data overrides, except if options.editable.overrideItems is set.\n    if (\n      !this.options ||\n      !this.options.editable ||\n      this.options.editable.overrideItems !== true\n    ) {\n      if (this.data) {\n        if (typeof this.data.editable === \"boolean\") {\n          this.editable = {\n            updateTime: this.data.editable,\n            updateGroup: this.data.editable,\n            remove: this.data.editable,\n          };\n        } else if (typeof this.data.editable === \"object\") {\n          // TODO: in timeline.js 5.0, we should change this to not reset options from the timeline configuration.\n          // Basically just remove the next line...\n          this.editable = {};\n          util.selectiveExtend(\n            [\"updateTime\", \"updateGroup\", \"remove\"],\n            this.editable,\n            this.data.editable,\n          );\n        }\n      }\n    }\n  }\n\n  /**\n   * Return the width of the item left from its start date\n   * @return {number}\n   */\n  getWidthLeft() {\n    return 0;\n  }\n\n  /**\n   * Return the width of the item right from the max of its start and end date\n   * @return {number}\n   */\n  getWidthRight() {\n    return 0;\n  }\n\n  /**\n   * Return the title of the item\n   * @return {string | undefined}\n   */\n  getTitle() {\n    if (this.options.tooltip && this.options.tooltip.template) {\n      const templateFunction = this.options.tooltip.template.bind(this);\n      return templateFunction(this._getItemData(), this.data);\n    }\n\n    return this.data.title;\n  }\n}\n\nItem.prototype.stack = true;\n\nexport default Item;\n", "import Item from \"./Item.js\";\n\n/**\n * @constructor BoxItem\n * @extends Item\n */\nclass BoxItem extends Item {\n  /**\n   * @param {Object} data             Object containing parameters start\n   *                                  content, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} [options]        Configuration options\n   *                                  // TODO: describe available options\n   */\n  constructor(data, conversion, options) {\n    super(data, conversion, options);\n    this.props = {\n      dot: {\n        width: 0,\n        height: 0,\n      },\n      line: {\n        width: 0,\n        height: 0,\n      },\n    };\n    // validate data\n    if (data) {\n      if (data.start == undefined) {\n        throw new Error(`Property \"start\" missing in item ${data}`);\n      }\n    }\n  }\n\n  /**\n   * Check whether this item is visible inside given range\n   * @param {{start: number, end: number}} range with a timestamp for start and end\n   * @returns {boolean} True if visible\n   */\n  isVisible(range) {\n    if (this.cluster) {\n      return false;\n    }\n    // determine visibility\n    let isVisible;\n    const align = this.data.align || this.options.align;\n    const widthInMs = this.width * range.getMillisecondsPerPixel();\n\n    if (align == \"right\") {\n      isVisible =\n        this.data.start.getTime() > range.start &&\n        this.data.start.getTime() - widthInMs < range.end;\n    } else if (align == \"left\") {\n      isVisible =\n        this.data.start.getTime() + widthInMs > range.start &&\n        this.data.start.getTime() < range.end;\n    } else {\n      // default or 'center'\n      isVisible =\n        this.data.start.getTime() + widthInMs / 2 > range.start &&\n        this.data.start.getTime() - widthInMs / 2 < range.end;\n    }\n    return isVisible;\n  }\n\n  /**\n   * create DOM element\n   * @private\n   */\n  _createDomElement() {\n    if (!this.dom) {\n      // create DOM\n      this.dom = {};\n\n      // create main box\n      this.dom.box = document.createElement(\"DIV\");\n\n      // contents box (inside the background box). used for making margins\n      this.dom.content = document.createElement(\"DIV\");\n      this.dom.content.className = \"vis-item-content\";\n      this.dom.box.appendChild(this.dom.content);\n\n      // line to axis\n      this.dom.line = document.createElement(\"DIV\");\n      this.dom.line.className = \"vis-line\";\n\n      // dot on axis\n      this.dom.dot = document.createElement(\"DIV\");\n      this.dom.dot.className = \"vis-dot\";\n\n      // attach this item as attribute\n      this.dom.box[\"vis-item\"] = this;\n\n      this.dirty = true;\n    }\n  }\n\n  /**\n   * append DOM element\n   * @private\n   */\n  _appendDomElement() {\n    if (!this.parent) {\n      throw new Error(\"Cannot redraw item: no parent attached\");\n    }\n    if (!this.dom.box.parentNode) {\n      const foreground = this.parent.dom.foreground;\n      if (!foreground)\n        throw new Error(\n          \"Cannot redraw item: parent has no foreground container element\",\n        );\n      foreground.appendChild(this.dom.box);\n    }\n    if (!this.dom.line.parentNode) {\n      var background = this.parent.dom.background;\n      if (!background)\n        throw new Error(\n          \"Cannot redraw item: parent has no background container element\",\n        );\n      background.appendChild(this.dom.line);\n    }\n    if (!this.dom.dot.parentNode) {\n      const axis = this.parent.dom.axis;\n      if (!background)\n        throw new Error(\n          \"Cannot redraw item: parent has no axis container element\",\n        );\n      axis.appendChild(this.dom.dot);\n    }\n    this.displayed = true;\n  }\n\n  /**\n   * update dirty DOM element\n   * @private\n   */\n  _updateDirtyDomComponents() {\n    // An item is marked dirty when:\n    // - the item is not yet rendered\n    // - the item's data is changed\n    // - the item is selected/deselected\n    if (this.dirty) {\n      this._updateContents(this.dom.content);\n      this._updateDataAttributes(this.dom.box);\n      this._updateStyle(this.dom.box);\n\n      const editable = this.editable.updateTime || this.editable.updateGroup;\n\n      // update class\n      const className =\n        (this.data.className ? \" \" + this.data.className : \"\") +\n        (this.selected ? \" vis-selected\" : \"\") +\n        (editable ? \" vis-editable\" : \" vis-readonly\");\n      this.dom.box.className = `vis-item vis-box${className}`;\n      this.dom.line.className = `vis-item vis-line${className}`;\n      this.dom.dot.className = `vis-item vis-dot${className}`;\n    }\n  }\n\n  /**\n   * get DOM components sizes\n   * @return {object}\n   * @private\n   */\n  _getDomComponentsSizes() {\n    return {\n      previous: {\n        right: this.dom.box.style.right,\n        left: this.dom.box.style.left,\n      },\n      dot: {\n        height: this.dom.dot.offsetHeight,\n        width: this.dom.dot.offsetWidth,\n      },\n      line: {\n        width: this.dom.line.offsetWidth,\n      },\n      box: {\n        width: this.dom.box.offsetWidth,\n        height: this.dom.box.offsetHeight,\n      },\n    };\n  }\n\n  /**\n   * update DOM components sizes\n   * @param {object} sizes\n   * @private\n   */\n  _updateDomComponentsSizes(sizes) {\n    if (this.options.rtl) {\n      this.dom.box.style.right = \"0px\";\n    } else {\n      this.dom.box.style.left = \"0px\";\n    }\n\n    // recalculate size\n    this.props.dot.height = sizes.dot.height;\n    this.props.dot.width = sizes.dot.width;\n    this.props.line.width = sizes.line.width;\n    this.width = sizes.box.width;\n    this.height = sizes.box.height;\n\n    // restore previous position\n    if (this.options.rtl) {\n      this.dom.box.style.right = sizes.previous.right;\n    } else {\n      this.dom.box.style.left = sizes.previous.left;\n    }\n\n    this.dirty = false;\n  }\n\n  /**\n   * repaint DOM additionals\n   * @private\n   */\n  _repaintDomAdditionals() {\n    this._repaintOnItemUpdateTimeTooltip(this.dom.box);\n    this._repaintDragCenter();\n    this._repaintDeleteButton(this.dom.box);\n  }\n\n  /**\n   * Repaint the item\n   * @param {boolean} [returnQueue=false]  return the queue\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  redraw(returnQueue) {\n    let sizes;\n    const queue = [\n      // create item DOM\n      this._createDomElement.bind(this),\n\n      // append DOM to parent DOM\n      this._appendDomElement.bind(this),\n\n      // update dirty DOM\n      this._updateDirtyDomComponents.bind(this),\n\n      () => {\n        if (this.dirty) {\n          sizes = this._getDomComponentsSizes();\n        }\n      },\n\n      () => {\n        if (this.dirty) {\n          this._updateDomComponentsSizes.bind(this)(sizes);\n        }\n      },\n\n      // repaint DOM additionals\n      this._repaintDomAdditionals.bind(this),\n    ];\n\n    if (returnQueue) {\n      return queue;\n    } else {\n      let result;\n      queue.forEach((fn) => {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * Show the item in the DOM (when not already visible). The items DOM will\n   * be created when needed.\n   * @param {boolean} [returnQueue=false]  whether to return a queue of functions to execute instead of just executing them\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  show(returnQueue) {\n    if (!this.displayed) {\n      return this.redraw(returnQueue);\n    }\n  }\n\n  /**\n   * Hide the item from the DOM (when visible)\n   */\n  hide() {\n    if (this.displayed) {\n      const dom = this.dom;\n\n      if (dom.box.remove) dom.box.remove();\n      else if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box); // IE11\n\n      if (dom.line.remove) dom.line.remove();\n      else if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line); // IE11\n\n      if (dom.dot.remove) dom.dot.remove();\n      else if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot); // IE11\n\n      this.displayed = false;\n    }\n  }\n\n  /**\n   * Reposition the item XY\n   */\n  repositionXY() {\n    const rtl = this.options.rtl;\n\n    const repositionXY = (element, x, y, rtl = false) => {\n      if (x === undefined && y === undefined) return;\n      // If rtl invert the number.\n      const directionX = rtl ? x * -1 : x;\n\n      //no y. translate x\n      if (y === undefined) {\n        element.style.transform = `translateX(${directionX}px)`;\n        return;\n      }\n\n      //no x. translate y\n      if (x === undefined) {\n        element.style.transform = `translateY(${y}px)`;\n        return;\n      }\n\n      element.style.transform = `translate(${directionX}px, ${y}px)`;\n    };\n    repositionXY(this.dom.box, this.boxX, this.boxY, rtl);\n    repositionXY(this.dom.dot, this.dotX, this.dotY, rtl);\n    repositionXY(this.dom.line, this.lineX, this.lineY, rtl);\n  }\n\n  /**\n   * Reposition the item horizontally\n   * @Override\n   */\n  repositionX() {\n    const start = this.conversion.toScreen(this.data.start);\n    const align =\n      this.data.align === undefined ? this.options.align : this.data.align;\n    const lineWidth = this.props.line.width;\n    const dotWidth = this.props.dot.width;\n\n    if (align == \"right\") {\n      // calculate right position of the box\n      this.boxX = start - this.width;\n      this.lineX = start - lineWidth;\n      this.dotX = start - lineWidth / 2 - dotWidth / 2;\n    } else if (align == \"left\") {\n      // calculate left position of the box\n      this.boxX = start;\n      this.lineX = start;\n      this.dotX = start + lineWidth / 2 - dotWidth / 2;\n    } else {\n      // default or 'center'\n      this.boxX = start - this.width / 2;\n      this.lineX = this.options.rtl ? start - lineWidth : start - lineWidth / 2;\n      this.dotX = start - dotWidth / 2;\n    }\n\n    if (this.options.rtl) this.right = this.boxX;\n    else this.left = this.boxX;\n\n    this.repositionXY();\n  }\n\n  /**\n   * Reposition the item vertically\n   * @Override\n   */\n  repositionY() {\n    const orientation = this.options.orientation.item;\n    const lineStyle = this.dom.line.style;\n\n    if (orientation == \"top\") {\n      const lineHeight = this.parent.top + this.top + 1;\n\n      this.boxY = this.top || 0;\n      lineStyle.height = `${lineHeight}px`;\n      lineStyle.bottom = \"\";\n      lineStyle.top = \"0\";\n    } else {\n      // orientation 'bottom'\n      const itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty\n      const lineHeight =\n        itemSetHeight - this.parent.top - this.parent.height + this.top;\n\n      this.boxY = this.parent.height - this.top - (this.height || 0);\n      lineStyle.height = `${lineHeight}px`;\n      lineStyle.top = \"\";\n      lineStyle.bottom = \"0\";\n    }\n\n    this.dotY = -this.props.dot.height / 2;\n\n    this.repositionXY();\n  }\n\n  /**\n   * Return the width of the item left from its start date\n   * @return {number}\n   */\n  getWidthLeft() {\n    return this.width / 2;\n  }\n\n  /**\n   * Return the width of the item right from its start date\n   * @return {number}\n   */\n  getWidthRight() {\n    return this.width / 2;\n  }\n}\n\nexport default BoxItem;\n", "import Item from \"./Item.js\";\n\n/**\n * @constructor PointItem\n * @extends Item\n */\nclass PointItem extends Item {\n  /**\n   * @param {Object} data             Object containing parameters start\n   *                                  content, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} [options]        Configuration options\n   *                                  // TODO: describe available options\n   */\n  constructor(data, conversion, options) {\n    super(data, conversion, options);\n    this.props = {\n      dot: {\n        top: 0,\n        width: 0,\n        height: 0,\n      },\n      content: {\n        height: 0,\n        marginLeft: 0,\n        marginRight: 0,\n      },\n    };\n    // validate data\n    if (data) {\n      if (data.start == undefined) {\n        throw new Error(`Property \"start\" missing in item ${data}`);\n      }\n    }\n  }\n\n  /**\n   * Check whether this item is visible inside given range\n   * @param {{start: number, end: number}} range with a timestamp for start and end\n   * @returns {boolean} True if visible\n   */\n  isVisible(range) {\n    if (this.cluster) {\n      return false;\n    }\n    // determine visibility\n    const widthInMs = this.width * range.getMillisecondsPerPixel();\n\n    return (\n      this.data.start.getTime() + widthInMs > range.start &&\n      this.data.start < range.end\n    );\n  }\n\n  /**\n   * create DOM element\n   * @private\n   */\n  _createDomElement() {\n    if (!this.dom) {\n      // create DOM\n      this.dom = {};\n\n      // background box\n      this.dom.point = document.createElement(\"div\");\n      // className is updated in redraw()\n\n      // contents box, right from the dot\n      this.dom.content = document.createElement(\"div\");\n      this.dom.content.className = \"vis-item-content\";\n      this.dom.point.appendChild(this.dom.content);\n\n      // dot at start\n      this.dom.dot = document.createElement(\"div\");\n      this.dom.point.appendChild(this.dom.dot);\n\n      // attach this item as attribute\n      this.dom.point[\"vis-item\"] = this;\n\n      this.dirty = true;\n    }\n  }\n\n  /**\n   * append DOM element\n   * @private\n   */\n  _appendDomElement() {\n    if (!this.parent) {\n      throw new Error(\"Cannot redraw item: no parent attached\");\n    }\n    if (!this.dom.point.parentNode) {\n      const foreground = this.parent.dom.foreground;\n      if (!foreground) {\n        throw new Error(\n          \"Cannot redraw item: parent has no foreground container element\",\n        );\n      }\n      foreground.appendChild(this.dom.point);\n    }\n    this.displayed = true;\n  }\n\n  /**\n   * update dirty DOM components\n   * @private\n   */\n  _updateDirtyDomComponents() {\n    // An item is marked dirty when:\n    // - the item is not yet rendered\n    // - the item's data is changed\n    // - the item is selected/deselected\n    if (this.dirty) {\n      this._updateContents(this.dom.content);\n      this._updateDataAttributes(this.dom.point);\n      this._updateStyle(this.dom.point);\n\n      const editable = this.editable.updateTime || this.editable.updateGroup;\n      // update class\n      const className =\n        (this.data.className ? \" \" + this.data.className : \"\") +\n        (this.selected ? \" vis-selected\" : \"\") +\n        (editable ? \" vis-editable\" : \" vis-readonly\");\n      this.dom.point.className = `vis-item vis-point${className}`;\n      this.dom.dot.className = `vis-item vis-dot${className}`;\n    }\n  }\n\n  /**\n   * get DOM component sizes\n   * @return {object}\n   * @private\n   */\n  _getDomComponentsSizes() {\n    return {\n      dot: {\n        width: this.dom.dot.offsetWidth,\n        height: this.dom.dot.offsetHeight,\n      },\n      content: {\n        width: this.dom.content.offsetWidth,\n        height: this.dom.content.offsetHeight,\n      },\n      point: {\n        width: this.dom.point.offsetWidth,\n        height: this.dom.point.offsetHeight,\n      },\n    };\n  }\n\n  /**\n   * update DOM components sizes\n   * @param {array} sizes\n   * @private\n   */\n  _updateDomComponentsSizes(sizes) {\n    // recalculate size of dot and contents\n    this.props.dot.width = sizes.dot.width;\n    this.props.dot.height = sizes.dot.height;\n    this.props.content.height = sizes.content.height;\n\n    // resize contents\n    if (this.options.rtl) {\n      this.dom.content.style.marginRight = `${this.props.dot.width / 2}px`;\n    } else {\n      this.dom.content.style.marginLeft = `${this.props.dot.width / 2}px`;\n    }\n    //this.dom.content.style.marginRight = ... + 'px'; // TODO: margin right\n\n    // recalculate size\n    this.width = sizes.point.width;\n    this.height = sizes.point.height;\n\n    // reposition the dot\n    this.dom.dot.style.top = `${(this.height - this.props.dot.height) / 2}px`;\n\n    const dotWidth = this.props.dot.width;\n    const translateX = this.options.rtl ? dotWidth / 2 : (dotWidth / 2) * -1;\n    this.dom.dot.style.transform = `translateX(${translateX}px`;\n    this.dirty = false;\n  }\n\n  /**\n   * Repain DOM additionals\n   * @private\n   */\n  _repaintDomAdditionals() {\n    this._repaintOnItemUpdateTimeTooltip(this.dom.point);\n    this._repaintDragCenter();\n    this._repaintDeleteButton(this.dom.point);\n  }\n\n  /**\n   * Repaint the item\n   * @param {boolean} [returnQueue=false]  return the queue\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  redraw(returnQueue) {\n    let sizes;\n    const queue = [\n      // create item DOM\n      this._createDomElement.bind(this),\n\n      // append DOM to parent DOM\n      this._appendDomElement.bind(this),\n\n      // update dirty DOM\n      this._updateDirtyDomComponents.bind(this),\n\n      () => {\n        if (this.dirty) {\n          sizes = this._getDomComponentsSizes();\n        }\n      },\n\n      () => {\n        if (this.dirty) {\n          this._updateDomComponentsSizes.bind(this)(sizes);\n        }\n      },\n\n      // repaint DOM additionals\n      this._repaintDomAdditionals.bind(this),\n    ];\n\n    if (returnQueue) {\n      return queue;\n    } else {\n      let result;\n      queue.forEach((fn) => {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * Reposition XY\n   */\n  repositionXY() {\n    const rtl = this.options.rtl;\n\n    const repositionXY = (element, x, y, rtl = false) => {\n      if (x === undefined && y === undefined) return;\n      // If rtl invert the number.\n      const directionX = rtl ? x * -1 : x;\n\n      //no y. translate x\n      if (y === undefined) {\n        element.style.transform = `translateX(${directionX}px)`;\n        return;\n      }\n\n      //no x. translate y\n      if (x === undefined) {\n        element.style.transform = `translateY(${y}px)`;\n        return;\n      }\n\n      element.style.transform = `translate(${directionX}px, ${y}px)`;\n    };\n    repositionXY(this.dom.point, this.pointX, this.pointY, rtl);\n  }\n\n  /**\n   * Show the item in the DOM (when not already visible). The items DOM will\n   * be created when needed.\n   * @param {boolean} [returnQueue=false]  whether to return a queue of functions to execute instead of just executing them\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  show(returnQueue) {\n    if (!this.displayed) {\n      return this.redraw(returnQueue);\n    }\n  }\n\n  /**\n   * Hide the item from the DOM (when visible)\n   */\n  hide() {\n    if (this.displayed) {\n      if (this.dom.point.parentNode) {\n        this.dom.point.parentNode.removeChild(this.dom.point);\n      }\n\n      this.displayed = false;\n    }\n  }\n\n  /**\n   * Reposition the item horizontally\n   * @Override\n   */\n  repositionX() {\n    const start = this.conversion.toScreen(this.data.start);\n\n    this.pointX = start;\n    if (this.options.rtl) {\n      this.right = start - this.props.dot.width;\n    } else {\n      this.left = start - this.props.dot.width;\n    }\n\n    this.repositionXY();\n  }\n\n  /**\n   * Reposition the item vertically\n   * @Override\n   */\n  repositionY() {\n    const orientation = this.options.orientation.item;\n    if (orientation == \"top\") {\n      this.pointY = this.top;\n    } else {\n      this.pointY = this.parent.height - this.top - this.height;\n    }\n\n    this.repositionXY();\n  }\n\n  /**\n   * Return the width of the item left from its start date\n   * @return {number}\n   */\n  getWidthLeft() {\n    return this.props.dot.width;\n  }\n\n  /**\n   * Return the width of the item right from  its start date\n   * @return {number}\n   */\n  getWidthRight() {\n    return this.props.dot.width;\n  }\n}\n\nexport default PointItem;\n", "import Item from \"./Item.js\";\n\n/**\n * @constructor RangeItem\n * @extends Item\n */\nclass RangeItem extends Item {\n  /**\n   * @param {Object} data             Object containing parameters start, end\n   *                                  content, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} [options]        Configuration options\n   *                                  // TODO: describe options\n   */\n  constructor(data, conversion, options) {\n    super(data, conversion, options);\n    this.props = {\n      content: {\n        width: 0,\n      },\n    };\n    this.overflow = false; // if contents can overflow (css styling), this flag is set to true\n    // validate data\n    if (data) {\n      if (data.start == undefined) {\n        throw new Error(`Property \"start\" missing in item ${data.id}`);\n      }\n      if (data.end == undefined) {\n        throw new Error(`Property \"end\" missing in item ${data.id}`);\n      }\n    }\n  }\n\n  /**\n   * Check whether this item is visible inside given range\n   *\n   * @param {timeline.Range} range with a timestamp for start and end\n   * @returns {boolean} True if visible\n   */\n  isVisible(range) {\n    if (this.cluster) {\n      return false;\n    }\n    // determine visibility\n    return this.data.start < range.end && this.data.end > range.start;\n  }\n\n  /**\n   * create DOM elements\n   * @private\n   */\n  _createDomElement() {\n    if (!this.dom) {\n      // create DOM\n      this.dom = {};\n\n      // background box\n      this.dom.box = document.createElement(\"div\");\n      // className is updated in redraw()\n\n      // frame box (to prevent the item contents from overflowing)\n      this.dom.frame = document.createElement(\"div\");\n      this.dom.frame.className = \"vis-item-overflow\";\n      this.dom.box.appendChild(this.dom.frame);\n\n      // visible frame box (showing the frame that is always visible)\n      this.dom.visibleFrame = document.createElement(\"div\");\n      this.dom.visibleFrame.className = \"vis-item-visible-frame\";\n      this.dom.box.appendChild(this.dom.visibleFrame);\n\n      // contents box\n      this.dom.content = document.createElement(\"div\");\n      this.dom.content.className = \"vis-item-content\";\n      this.dom.frame.appendChild(this.dom.content);\n\n      // attach this item as attribute\n      this.dom.box[\"vis-item\"] = this;\n\n      this.dirty = true;\n    }\n  }\n\n  /**\n   * append element to DOM\n   * @private\n   */\n  _appendDomElement() {\n    if (!this.parent) {\n      throw new Error(\"Cannot redraw item: no parent attached\");\n    }\n    if (!this.dom.box.parentNode) {\n      const foreground = this.parent.dom.foreground;\n      if (!foreground) {\n        throw new Error(\n          \"Cannot redraw item: parent has no foreground container element\",\n        );\n      }\n      foreground.appendChild(this.dom.box);\n    }\n    this.displayed = true;\n  }\n\n  /**\n   * update dirty DOM components\n   * @private\n   */\n  _updateDirtyDomComponents() {\n    // update dirty DOM. An item is marked dirty when:\n    // - the item is not yet rendered\n    // - the item's data is changed\n    // - the item is selected/deselected\n    if (this.dirty) {\n      this._updateContents(this.dom.content);\n      this._updateDataAttributes(this.dom.box);\n      this._updateStyle(this.dom.box);\n\n      const editable = this.editable.updateTime || this.editable.updateGroup;\n\n      // update class\n      const className =\n        (this.data.className ? \" \" + this.data.className : \"\") +\n        (this.selected ? \" vis-selected\" : \"\") +\n        (editable ? \" vis-editable\" : \" vis-readonly\");\n      this.dom.box.className = this.baseClassName + className;\n\n      // turn off max-width to be able to calculate the real width\n      // this causes an extra browser repaint/reflow, but so be it\n      this.dom.content.style.maxWidth = \"none\";\n    }\n  }\n\n  /**\n   * get DOM component sizes\n   * @return {object}\n   * @private\n   */\n  _getDomComponentsSizes() {\n    // determine from css whether this box has overflow\n    this.overflow =\n      window.getComputedStyle(this.dom.frame).overflow !== \"hidden\";\n    this.whiteSpace =\n      window.getComputedStyle(this.dom.content).whiteSpace !== \"nowrap\";\n    return {\n      content: {\n        width: this.dom.content.offsetWidth,\n      },\n      box: {\n        height: this.dom.box.offsetHeight,\n      },\n    };\n  }\n\n  /**\n   * update DOM component sizes\n   * @param {array} sizes\n   * @private\n   */\n  _updateDomComponentsSizes(sizes) {\n    this.props.content.width = sizes.content.width;\n    this.height = sizes.box.height;\n    this.dom.content.style.maxWidth = \"\";\n    this.dirty = false;\n  }\n\n  /**\n   * repaint DOM additional components\n   * @private\n   */\n  _repaintDomAdditionals() {\n    this._repaintOnItemUpdateTimeTooltip(this.dom.box);\n    this._repaintDeleteButton(this.dom.box);\n    this._repaintDragCenter();\n    this._repaintDragLeft();\n    this._repaintDragRight();\n  }\n\n  /**\n   * Repaint the item\n   * @param {boolean} [returnQueue=false]  return the queue\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  redraw(returnQueue) {\n    let sizes;\n    const queue = [\n      // create item DOM\n      this._createDomElement.bind(this),\n\n      // append DOM to parent DOM\n      this._appendDomElement.bind(this),\n\n      // update dirty DOM\n      this._updateDirtyDomComponents.bind(this),\n\n      () => {\n        if (this.dirty) {\n          sizes = this._getDomComponentsSizes.bind(this)();\n        }\n      },\n\n      () => {\n        if (this.dirty) {\n          this._updateDomComponentsSizes.bind(this)(sizes);\n        }\n      },\n\n      // repaint DOM additionals\n      this._repaintDomAdditionals.bind(this),\n    ];\n\n    if (returnQueue) {\n      return queue;\n    } else {\n      let result;\n      queue.forEach((fn) => {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * Show the item in the DOM (when not already visible). The items DOM will\n   * be created when needed.\n   * @param {boolean} [returnQueue=false]  whether to return a queue of functions to execute instead of just executing them\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  show(returnQueue) {\n    if (!this.displayed) {\n      return this.redraw(returnQueue);\n    }\n  }\n\n  /**\n   * Hide the item from the DOM (when visible)\n   */\n  hide() {\n    if (this.displayed) {\n      const box = this.dom.box;\n\n      if (box.parentNode) {\n        box.parentNode.removeChild(box);\n      }\n\n      this.displayed = false;\n    }\n  }\n\n  /**\n   * Reposition the item horizontally\n   * @param {boolean} [limitSize=true] If true (default), the width of the range\n   *                                   item will be limited, as the browser cannot\n   *                                   display very wide divs. This means though\n   *                                   that the applied left and width may\n   *                                   not correspond to the ranges start and end\n   * @Override\n   */\n  repositionX(limitSize) {\n    const parentWidth = this.parent.width;\n    let start = this.conversion.toScreen(this.data.start);\n    let end = this.conversion.toScreen(this.data.end);\n    const align =\n      this.data.align === undefined ? this.options.align : this.data.align;\n    let contentStartPosition;\n    let contentWidth;\n\n    // limit the width of the range, as browsers cannot draw very wide divs\n    // unless limitSize: false is explicitly set in item data\n    if (\n      this.data.limitSize !== false &&\n      (limitSize === undefined || limitSize === true)\n    ) {\n      if (start < -parentWidth) {\n        start = -parentWidth;\n      }\n      if (end > 2 * parentWidth) {\n        end = 2 * parentWidth;\n      }\n    }\n\n    //round to 3 decimals to compensate floating-point values rounding\n    const boxWidth = Math.max(Math.round((end - start) * 1000) / 1000, 1);\n\n    if (this.overflow) {\n      if (this.options.rtl) {\n        this.right = start;\n      } else {\n        this.left = start;\n      }\n      this.width = boxWidth + this.props.content.width;\n      contentWidth = this.props.content.width;\n\n      // Note: The calculation of width is an optimistic calculation, giving\n      //       a width which will not change when moving the Timeline\n      //       So no re-stacking needed, which is nicer for the eye;\n    } else {\n      if (this.options.rtl) {\n        this.right = start;\n      } else {\n        this.left = start;\n      }\n      this.width = boxWidth;\n      contentWidth = Math.min(end - start, this.props.content.width);\n    }\n\n    if (this.options.rtl) {\n      this.dom.box.style.transform = `translateX(${this.right * -1}px)`;\n    } else {\n      this.dom.box.style.transform = `translateX(${this.left}px)`;\n    }\n    this.dom.box.style.width = `${boxWidth}px`;\n    if (this.whiteSpace) {\n      this.height = this.dom.box.offsetHeight;\n    }\n\n    switch (align) {\n      case \"left\":\n        this.dom.content.style.transform = \"translateX(0)\";\n        break;\n\n      case \"right\":\n        if (this.options.rtl) {\n          const translateX = Math.max(boxWidth - contentWidth, 0) * -1;\n          this.dom.content.style.transform = `translateX(${translateX}px)`;\n        } else {\n          this.dom.content.style.transform = `translateX(${Math.max(boxWidth - contentWidth, 0)}px)`;\n        }\n        break;\n\n      case \"center\":\n        if (this.options.rtl) {\n          const translateX = Math.max((boxWidth - contentWidth) / 2, 0) * -1;\n          this.dom.content.style.transform = `translateX(${translateX}px)`;\n        } else {\n          this.dom.content.style.transform = `translateX(${Math.max((boxWidth - contentWidth) / 2, 0)}px)`;\n        }\n\n        break;\n\n      default: // 'auto'\n        // when range exceeds left of the window, position the contents at the left of the visible area\n        if (this.overflow) {\n          if (end > 0) {\n            contentStartPosition = Math.max(-start, 0);\n          } else {\n            contentStartPosition = -contentWidth; // ensure it's not visible anymore\n          }\n        } else {\n          if (start < 0) {\n            contentStartPosition = -start;\n          } else {\n            contentStartPosition = 0;\n          }\n        }\n        if (this.options.rtl) {\n          const translateX = contentStartPosition * -1;\n          this.dom.content.style.transform = `translateX(${translateX}px)`;\n        } else {\n          this.dom.content.style.transform = `translateX(${contentStartPosition}px)`;\n          // this.dom.content.style.width = `calc(100% - ${contentStartPosition}px)`;\n        }\n    }\n  }\n\n  /**\n   * Reposition the item vertically\n   * @Override\n   */\n  repositionY() {\n    const orientation = this.options.orientation.item;\n    const box = this.dom.box;\n\n    if (orientation == \"top\") {\n      box.style.top = `${this.top}px`;\n    } else {\n      box.style.top = `${this.parent.height - this.top - this.height}px`;\n    }\n  }\n\n  /**\n   * Repaint a drag area on the left side of the range when the range is selected\n   * @protected\n   */\n  _repaintDragLeft() {\n    if (\n      (this.selected || this.options.itemsAlwaysDraggable.range) &&\n      this.editable.updateTime &&\n      !this.dom.dragLeft\n    ) {\n      // create and show drag area\n      const dragLeft = document.createElement(\"div\");\n      dragLeft.className = \"vis-drag-left\";\n      dragLeft.dragLeftItem = this;\n\n      this.dom.box.appendChild(dragLeft);\n      this.dom.dragLeft = dragLeft;\n    } else if (\n      !this.selected &&\n      !this.options.itemsAlwaysDraggable.range &&\n      this.dom.dragLeft\n    ) {\n      // delete drag area\n      if (this.dom.dragLeft.parentNode) {\n        this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft);\n      }\n      this.dom.dragLeft = null;\n    }\n  }\n\n  /**\n   * Repaint a drag area on the right side of the range when the range is selected\n   * @protected\n   */\n  _repaintDragRight() {\n    if (\n      (this.selected || this.options.itemsAlwaysDraggable.range) &&\n      this.editable.updateTime &&\n      !this.dom.dragRight\n    ) {\n      // create and show drag area\n      const dragRight = document.createElement(\"div\");\n      dragRight.className = \"vis-drag-right\";\n      dragRight.dragRightItem = this;\n\n      this.dom.box.appendChild(dragRight);\n      this.dom.dragRight = dragRight;\n    } else if (\n      !this.selected &&\n      !this.options.itemsAlwaysDraggable.range &&\n      this.dom.dragRight\n    ) {\n      // delete drag area\n      if (this.dom.dragRight.parentNode) {\n        this.dom.dragRight.parentNode.removeChild(this.dom.dragRight);\n      }\n      this.dom.dragRight = null;\n    }\n  }\n}\n\nRangeItem.prototype.baseClassName = \"vis-item vis-range\";\n\nexport default RangeItem;\n", "import Item from \"./Item.js\";\nimport BackgroundGroup from \"../BackgroundGroup.js\";\nimport RangeItem from \"./RangeItem.js\";\n\n/**\n * @constructor BackgroundItem\n * @extends Item\n */\nclass BackgroundItem extends Item {\n  /**\n   * @constructor BackgroundItem\n   * @param {Object} data             Object containing parameters start, end\n   *                                  content, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} [options]        Configuration options\n   *                                  // TODO: describe options\n   * // TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation\n   */\n  constructor(data, conversion, options) {\n    super(data, conversion, options);\n    this.props = {\n      content: {\n        width: 0,\n      },\n    };\n    this.overflow = false; // if contents can overflow (css styling), this flag is set to true\n\n    // validate data\n    if (data) {\n      if (data.start == undefined) {\n        throw new Error(`Property \"start\" missing in item ${data.id}`);\n      }\n      if (data.end == undefined) {\n        throw new Error(`Property \"end\" missing in item ${data.id}`);\n      }\n    }\n  }\n\n  /**\n   * Check whether this item is visible inside given range\n   * @param {timeline.Range} range with a timestamp for start and end\n   * @returns {boolean} True if visible\n   */\n  isVisible(range) {\n    // determine visibility\n    return this.data.start < range.end && this.data.end > range.start;\n  }\n\n  /**\n   * create DOM element\n   * @private\n   */\n  _createDomElement() {\n    if (!this.dom) {\n      // create DOM\n      this.dom = {};\n\n      // background box\n      this.dom.box = document.createElement(\"div\");\n      // className is updated in redraw()\n\n      // frame box (to prevent the item contents from overflowing\n      this.dom.frame = document.createElement(\"div\");\n      this.dom.frame.className = \"vis-item-overflow\";\n      this.dom.box.appendChild(this.dom.frame);\n\n      // contents box\n      this.dom.content = document.createElement(\"div\");\n      this.dom.content.className = \"vis-item-content\";\n      this.dom.frame.appendChild(this.dom.content);\n\n      // Note: we do NOT attach this item as attribute to the DOM,\n      //       such that background items cannot be selected\n      //this.dom.box['vis-item'] = this;\n\n      this.dirty = true;\n    }\n  }\n\n  /**\n   * append DOM element\n   * @private\n   */\n  _appendDomElement() {\n    if (!this.parent) {\n      throw new Error(\"Cannot redraw item: no parent attached\");\n    }\n    if (!this.dom.box.parentNode) {\n      const background = this.parent.dom.background;\n      if (!background) {\n        throw new Error(\n          \"Cannot redraw item: parent has no background container element\",\n        );\n      }\n      background.appendChild(this.dom.box);\n    }\n    this.displayed = true;\n  }\n\n  /**\n   * update DOM Dirty components\n   * @private\n   */\n  _updateDirtyDomComponents() {\n    // update dirty DOM. An item is marked dirty when:\n    // - the item is not yet rendered\n    // - the item's data is changed\n    // - the item is selected/deselected\n    if (this.dirty) {\n      this._updateContents(this.dom.content);\n      this._updateDataAttributes(this.dom.content);\n      this._updateStyle(this.dom.box);\n\n      // update class\n      const className =\n        (this.data.className ? \" \" + this.data.className : \"\") +\n        (this.selected ? \" vis-selected\" : \"\");\n      this.dom.box.className = this.baseClassName + className;\n    }\n  }\n\n  /**\n   * get DOM components sizes\n   * @return {object}\n   * @private\n   */\n  _getDomComponentsSizes() {\n    // determine from css whether this box has overflow\n    this.overflow =\n      window.getComputedStyle(this.dom.content).overflow !== \"hidden\";\n    return {\n      content: {\n        width: this.dom.content.offsetWidth,\n      },\n    };\n  }\n\n  /**\n   * update DOM components sizes\n   * @param {object} sizes\n   * @private\n   */\n  _updateDomComponentsSizes(sizes) {\n    // recalculate size\n    this.props.content.width = sizes.content.width;\n    this.height = 0; // set height zero, so this item will be ignored when stacking items\n\n    this.dirty = false;\n  }\n\n  /**\n   * repaint DOM additionals\n   * @private\n   */\n  _repaintDomAdditionals() {}\n\n  /**\n   * Repaint the item\n   * @param {boolean} [returnQueue=false]  return the queue\n   * @return {boolean} the redraw result or the redraw queue if returnQueue=true\n   */\n  redraw(returnQueue) {\n    let sizes;\n    const queue = [\n      // create item DOM\n      this._createDomElement.bind(this),\n\n      // append DOM to parent DOM\n      this._appendDomElement.bind(this),\n\n      this._updateDirtyDomComponents.bind(this),\n\n      () => {\n        if (this.dirty) {\n          sizes = this._getDomComponentsSizes.bind(this)();\n        }\n      },\n\n      () => {\n        if (this.dirty) {\n          this._updateDomComponentsSizes.bind(this)(sizes);\n        }\n      },\n\n      // repaint DOM additionals\n      this._repaintDomAdditionals.bind(this),\n    ];\n\n    if (returnQueue) {\n      return queue;\n    } else {\n      let result;\n      queue.forEach((fn) => {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * Reposition the item vertically\n   * @Override\n   */\n  repositionY() {\n    let height;\n    const orientation = this.options.orientation.item;\n\n    // special positioning for subgroups\n    if (this.data.subgroup !== undefined) {\n      // TODO: instead of calculating the top position of the subgroups here for every BackgroundItem, calculate the top of the subgroup once in Itemset\n      const itemSubgroup = this.data.subgroup;\n\n      this.dom.box.style.height = `${this.parent.subgroups[itemSubgroup].height}px`;\n\n      if (orientation == \"top\") {\n        this.dom.box.style.top = `${this.parent.top + this.parent.subgroups[itemSubgroup].top}px`;\n      } else {\n        this.dom.box.style.top = `${this.parent.top + this.parent.height - this.parent.subgroups[itemSubgroup].top - this.parent.subgroups[itemSubgroup].height}px`;\n      }\n      this.dom.box.style.bottom = \"\";\n    }\n    // and in the case of no subgroups:\n    else {\n      // we want backgrounds with groups to only show in groups.\n      if (this.parent instanceof BackgroundGroup) {\n        // if the item is not in a group:\n        height = Math.max(\n          this.parent.height,\n          this.parent.itemSet.body.domProps.center.height,\n          this.parent.itemSet.body.domProps.centerContainer.height,\n        );\n        this.dom.box.style.bottom = orientation == \"bottom\" ? \"0\" : \"\";\n        this.dom.box.style.top = orientation == \"top\" ? \"0\" : \"\";\n      } else {\n        height = this.parent.height;\n        // same alignment for items when orientation is top or bottom\n        this.dom.box.style.top = `${this.parent.top}px`;\n        this.dom.box.style.bottom = \"\";\n      }\n    }\n    this.dom.box.style.height = `${height}px`;\n  }\n}\n\nBackgroundItem.prototype.baseClassName = \"vis-item vis-background\";\n\nBackgroundItem.prototype.stack = false;\n\n/**\n * Show the item in the DOM (when not already visible). The items DOM will\n * be created when needed.\n */\nBackgroundItem.prototype.show = RangeItem.prototype.show;\n\n/**\n * Hide the item from the DOM (when visible)\n * @return {Boolean} changed\n */\nBackgroundItem.prototype.hide = RangeItem.prototype.hide;\n\n/**\n * Reposition the item horizontally\n * @Override\n */\nBackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX;\n\nexport default BackgroundItem;\n", "import util from \"../util.js\";\n\n/**\n * Popup is a class to create a popup window with some text\n */\nclass Popup {\n  /**\n   * @param {Element} container       The container object.\n   * @param {string}  overflowMethod  How the popup should act to overflowing ('flip', 'cap' or 'none')\n   */\n  constructor(container, overflowMethod) {\n    this.container = container;\n    this.overflowMethod = overflowMethod || \"cap\";\n\n    this.x = 0;\n    this.y = 0;\n    this.padding = 5;\n    this.hidden = false;\n\n    // create the frame\n    this.frame = document.createElement(\"div\");\n    this.frame.className = \"vis-tooltip\";\n    this.container.appendChild(this.frame);\n  }\n\n  /**\n   * @param {number} x   Horizontal position of the popup window\n   * @param {number} y   Vertical position of the popup window\n   */\n  setPosition(x, y) {\n    this.x = parseInt(x);\n    this.y = parseInt(y);\n  }\n\n  /**\n   * Set the content for the popup window. This can be HTML code or text.\n   * @param {string | Element} content\n   */\n  setText(content) {\n    if (content instanceof Element) {\n      this.frame.innerHTML = \"\";\n      this.frame.appendChild(content);\n    } else {\n      this.frame.innerHTML = util.xss(content); // string containing text or HTML\n    }\n  }\n\n  /**\n   * Show the popup window\n   * @param {boolean} [doShow]    Show or hide the window\n   */\n  show(doShow) {\n    if (doShow === undefined) {\n      doShow = true;\n    }\n\n    if (doShow === true) {\n      var height = this.frame.clientHeight;\n      var width = this.frame.clientWidth;\n      var maxHeight = this.frame.parentNode.clientHeight;\n      var maxWidth = this.frame.parentNode.clientWidth;\n\n      var left = 0,\n        top = 0;\n\n      if (this.overflowMethod == \"flip\" || this.overflowMethod == \"none\") {\n        let isLeft = false,\n          isTop = true; // Where around the position it's located\n\n        if (this.overflowMethod == \"flip\") {\n          if (this.y - height < this.padding) {\n            isTop = false;\n          }\n\n          if (this.x + width > maxWidth - this.padding) {\n            isLeft = true;\n          }\n        }\n\n        if (isLeft) {\n          left = this.x - width;\n        } else {\n          left = this.x;\n        }\n\n        if (isTop) {\n          top = this.y - height;\n        } else {\n          top = this.y;\n        }\n      } else {\n        // this.overflowMethod == 'cap'\n        top = this.y - height;\n        if (top + height + this.padding > maxHeight) {\n          top = maxHeight - height - this.padding;\n        }\n        if (top < this.padding) {\n          top = this.padding;\n        }\n\n        left = this.x;\n        if (left + width + this.padding > maxWidth) {\n          left = maxWidth - width - this.padding;\n        }\n        if (left < this.padding) {\n          left = this.padding;\n        }\n      }\n\n      this.frame.style.left = left + \"px\";\n      this.frame.style.top = top + \"px\";\n      this.frame.style.visibility = \"visible\";\n      this.hidden = false;\n    } else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Hide the popup window\n   */\n  hide() {\n    this.hidden = true;\n    this.frame.style.left = \"0\";\n    this.frame.style.top = \"0\";\n    this.frame.style.visibility = \"hidden\";\n  }\n\n  /**\n   * Remove the popup window\n   */\n  destroy() {\n    this.frame.parentNode.removeChild(this.frame); // Remove element from DOM\n  }\n}\n\nexport default Popup;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $every = require('../internals/array-iteration').every;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('every');\n\n// `Array.prototype.every` method\n// https://tc39.es/ecma262/#sec-array.prototype.every\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n  every: function every(callbackfn /* , thisArg */) {\n    return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "'use strict';\nrequire('../../../modules/es.array.every');\nvar getBuiltInPrototypeMethod = require('../../../internals/get-built-in-prototype-method');\n\nmodule.exports = getBuiltInPrototypeMethod('Array', 'every');\n", "'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/every');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.every;\n  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.every) ? method : own;\n};\n", "'use strict';\nvar parent = require('../../es/instance/every');\n\nmodule.exports = parent;\n", "module.exports = require(\"core-js-pure/stable/instance/every\");", "import { randomUUID } from \"../../../util.js\";\nimport Item from \"./Item.js\";\n\n/**\n * ClusterItem\n */\nclass ClusterItem extends Item {\n  /**\n   * @constructor Item\n   * @param {Object} data             Object containing (optional) parameters type,\n   *                                  start, end, content, group, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} options          Configuration options\n   *                                  // TODO: describe available options\n   */\n  constructor(data, conversion, options) {\n    const modifiedOptions = Object.assign(\n      {},\n      { fitOnDoubleClick: true },\n      options,\n      { editable: false },\n    );\n    super(data, conversion, modifiedOptions);\n\n    this.props = {\n      content: {\n        width: 0,\n        height: 0,\n      },\n    };\n\n    if (!data || data.uiItems == undefined) {\n      throw new Error('Property \"uiItems\" missing in item ' + data.id);\n    }\n\n    this.id = randomUUID();\n    this.group = data.group;\n    this._setupRange();\n\n    this.emitter = this.data.eventEmitter;\n    this.range = this.data.range;\n    this.attached = false;\n    this.isCluster = true;\n    this.data.isCluster = true;\n  }\n\n  /**\n   * check if there are items\n   * @return {boolean}\n   */\n  hasItems() {\n    return this.data.uiItems && this.data.uiItems.length && this.attached;\n  }\n\n  /**\n   * set UI items\n   * @param {array} items\n   */\n  setUiItems(items) {\n    this.detach();\n\n    this.data.uiItems = items;\n\n    this._setupRange();\n\n    this.attach();\n  }\n\n  /**\n   * check is visible\n   * @param {object} range\n   * @return {boolean}\n   */\n  isVisible(range) {\n    const rangeWidth = this.data.end ? this.data.end - this.data.start : 0;\n    const widthInMs = this.width * range.getMillisecondsPerPixel();\n    const end = Math.max(\n      this.data.start.getTime() + rangeWidth,\n      this.data.start.getTime() + widthInMs,\n    );\n    return this.data.start < range.end && end > range.start && this.hasItems();\n  }\n\n  /**\n   * get cluster data\n   * @return {object}\n   */\n  getData() {\n    return {\n      isCluster: true,\n      id: this.id,\n      items: this.data.items || [],\n      data: this.data,\n    };\n  }\n\n  /**\n   * redraw cluster item\n   * @param {boolean} returnQueue\n   * @return {boolean}\n   */\n  redraw(returnQueue) {\n    var sizes;\n    var queue = [\n      // create item DOM\n      this._createDomElement.bind(this),\n\n      // append DOM to parent DOM\n      this._appendDomElement.bind(this),\n\n      // update dirty DOM\n      this._updateDirtyDomComponents.bind(this),\n\n      function () {\n        if (this.dirty) {\n          sizes = this._getDomComponentsSizes();\n        }\n      }.bind(this),\n\n      function () {\n        if (this.dirty) {\n          this._updateDomComponentsSizes.bind(this)(sizes);\n        }\n      }.bind(this),\n\n      // repaint DOM additionals\n      this._repaintDomAdditionals.bind(this),\n    ];\n\n    if (returnQueue) {\n      return queue;\n    } else {\n      var result;\n      queue.forEach(function (fn) {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * show cluster item\n   */\n  show() {\n    if (!this.displayed) {\n      this.redraw();\n    }\n  }\n\n  /**\n   * Hide the item from the DOM (when visible)\n   */\n  hide() {\n    if (this.displayed) {\n      var dom = this.dom;\n      if (dom.box.parentNode) {\n        dom.box.parentNode.removeChild(dom.box);\n      }\n\n      if (this.options.showStipes) {\n        if (dom.line.parentNode) {\n          dom.line.parentNode.removeChild(dom.line);\n        }\n        if (dom.dot.parentNode) {\n          dom.dot.parentNode.removeChild(dom.dot);\n        }\n      }\n      this.displayed = false;\n    }\n  }\n\n  /**\n   * reposition item x axis\n   */\n  repositionX() {\n    let start = this.conversion.toScreen(this.data.start);\n    let end = this.data.end ? this.conversion.toScreen(this.data.end) : 0;\n    if (end) {\n      this.repositionXWithRanges(start, end);\n    } else {\n      let align =\n        this.data.align === undefined ? this.options.align : this.data.align;\n      this.repositionXWithoutRanges(start, align);\n    }\n\n    if (this.options.showStipes) {\n      this.dom.line.style.display = this._isStipeVisible() ? \"block\" : \"none\";\n      this.dom.dot.style.display = this._isStipeVisible() ? \"block\" : \"none\";\n\n      if (this._isStipeVisible()) {\n        this.repositionStype(start, end);\n      }\n    }\n  }\n\n  /**\n   * reposition item stype\n   * @param {date} start\n   * @param {date} end\n   */\n  repositionStype(start, end) {\n    this.dom.line.style.display = \"block\";\n    this.dom.dot.style.display = \"block\";\n    const lineOffsetWidth = this.dom.line.offsetWidth;\n    const dotOffsetWidth = this.dom.dot.offsetWidth;\n\n    if (end) {\n      const lineOffset = lineOffsetWidth + start + (end - start) / 2;\n      const dotOffset = lineOffset - dotOffsetWidth / 2;\n      const lineOffsetDirection = this.options.rtl\n        ? lineOffset * -1\n        : lineOffset;\n      const dotOffsetDirection = this.options.rtl ? dotOffset * -1 : dotOffset;\n\n      this.dom.line.style.transform = `translateX(${lineOffsetDirection}px)`;\n      this.dom.dot.style.transform = `translateX(${dotOffsetDirection}px)`;\n    } else {\n      const lineOffsetDirection = this.options.rtl ? start * -1 : start;\n      const dotOffsetDirection = this.options.rtl\n        ? (start - dotOffsetWidth / 2) * -1\n        : start - dotOffsetWidth / 2;\n\n      this.dom.line.style.transform = `translateX(${lineOffsetDirection}px)`;\n      this.dom.dot.style.transform = `translateX(${dotOffsetDirection}px)`;\n    }\n  }\n\n  /**\n   * reposition x without ranges\n   * @param {date} start\n   * @param {string} align\n   */\n  repositionXWithoutRanges(start, align) {\n    // calculate left position of the box\n    if (align == \"right\") {\n      if (this.options.rtl) {\n        this.right = start - this.width;\n\n        // reposition box, line, and dot\n        this.dom.box.style.right = this.right + \"px\";\n      } else {\n        this.left = start - this.width;\n\n        // reposition box, line, and dot\n        this.dom.box.style.left = this.left + \"px\";\n      }\n    } else if (align == \"left\") {\n      if (this.options.rtl) {\n        this.right = start;\n\n        // reposition box, line, and dot\n        this.dom.box.style.right = this.right + \"px\";\n      } else {\n        this.left = start;\n\n        // reposition box, line, and dot\n        this.dom.box.style.left = this.left + \"px\";\n      }\n    } else {\n      // default or 'center'\n      if (this.options.rtl) {\n        this.right = start - this.width / 2;\n\n        // reposition box, line, and dot\n        this.dom.box.style.right = this.right + \"px\";\n      } else {\n        this.left = start - this.width / 2;\n\n        // reposition box, line, and dot\n        this.dom.box.style.left = this.left + \"px\";\n      }\n    }\n  }\n\n  /**\n   * reposition x with ranges\n   * @param {date} start\n   * @param {date} end\n   */\n  repositionXWithRanges(start, end) {\n    let boxWidth = Math.round(Math.max(end - start + 0.5, 1));\n\n    if (this.options.rtl) {\n      this.right = start;\n    } else {\n      this.left = start;\n    }\n\n    this.width = Math.max(boxWidth, this.minWidth || 0);\n\n    if (this.options.rtl) {\n      this.dom.box.style.right = this.right + \"px\";\n    } else {\n      this.dom.box.style.left = this.left + \"px\";\n    }\n\n    this.dom.box.style.width = boxWidth + \"px\";\n  }\n\n  /**\n   * reposition item y axis\n   */\n  repositionY() {\n    var orientation = this.options.orientation.item;\n    var box = this.dom.box;\n    if (orientation == \"top\") {\n      box.style.top = (this.top || 0) + \"px\";\n    } else {\n      // orientation 'bottom'\n      box.style.top = (this.parent.height - this.top - this.height || 0) + \"px\";\n    }\n\n    if (this.options.showStipes) {\n      if (orientation == \"top\") {\n        this.dom.line.style.top = \"0\";\n        this.dom.line.style.height = this.parent.top + this.top + 1 + \"px\";\n        this.dom.line.style.bottom = \"\";\n      } else {\n        // orientation 'bottom'\n        var itemSetHeight = this.parent.itemSet.props.height;\n        var lineHeight =\n          itemSetHeight - this.parent.top - this.parent.height + this.top;\n        this.dom.line.style.top = itemSetHeight - lineHeight + \"px\";\n        this.dom.line.style.bottom = \"0\";\n      }\n\n      this.dom.dot.style.top = -this.dom.dot.offsetHeight / 2 + \"px\";\n    }\n  }\n\n  /**\n   * get width left\n   * @return {number}\n   */\n  getWidthLeft() {\n    return this.width / 2;\n  }\n\n  /**\n   * get width right\n   * @return {number}\n   */\n  getWidthRight() {\n    return this.width / 2;\n  }\n\n  /**\n   * move cluster item\n   */\n  move() {\n    this.repositionX();\n    this.repositionY();\n  }\n\n  /**\n   * attach\n   */\n  attach() {\n    for (let item of this.data.uiItems) {\n      item.cluster = this;\n    }\n\n    this.data.items = this.data.uiItems.map((item) => item.data);\n\n    this.attached = true;\n    this.dirty = true;\n  }\n\n  /**\n   * detach\n   * @param {boolean} detachFromParent\n   * @return {void}\n   */\n  detach(detachFromParent = false) {\n    if (!this.hasItems()) {\n      return;\n    }\n\n    for (let item of this.data.uiItems) {\n      delete item.cluster;\n    }\n\n    this.attached = false;\n\n    if (detachFromParent && this.group) {\n      this.group.remove(this);\n      this.group = null;\n    }\n\n    this.data.items = [];\n    this.dirty = true;\n  }\n\n  /**\n   * handle on double click\n   */\n  _onDoubleClick() {\n    this._fit();\n  }\n\n  /**\n   * set range\n   */\n  _setupRange() {\n    const stats = this.data.uiItems.map((item) => ({\n      start: item.data.start.valueOf(),\n      end: item.data.end ? item.data.end.valueOf() : item.data.start.valueOf(),\n    }));\n\n    this.data.min = Math.min(\n      ...stats.map((s) => Math.min(s.start, s.end || s.start)),\n    );\n    this.data.max = Math.max(\n      ...stats.map((s) => Math.max(s.start, s.end || s.start)),\n    );\n    const centers = this.data.uiItems.map((item) => item.center);\n    const avg =\n      centers.reduce((sum, value) => sum + value, 0) / this.data.uiItems.length;\n\n    if (this.data.uiItems.some((item) => item.data.end)) {\n      // contains ranges\n      this.data.start = new Date(this.data.min);\n      this.data.end = new Date(this.data.max);\n    } else {\n      this.data.start = new Date(avg);\n      this.data.end = null;\n    }\n  }\n\n  /**\n   * get UI items\n   * @return {array}\n   */\n  _getUiItems() {\n    if (this.data.uiItems && this.data.uiItems.length) {\n      return this.data.uiItems.filter((item) => item.cluster === this);\n    }\n\n    return [];\n  }\n\n  /**\n   * create DOM element\n   */\n  _createDomElement() {\n    if (!this.dom) {\n      // create DOM\n      this.dom = {};\n\n      // create main box\n      this.dom.box = document.createElement(\"DIV\");\n\n      // contents box (inside the background box). used for making margins\n      this.dom.content = document.createElement(\"DIV\");\n      this.dom.content.className = \"vis-item-content\";\n\n      this.dom.box.appendChild(this.dom.content);\n\n      if (this.options.showStipes) {\n        // line to axis\n        this.dom.line = document.createElement(\"DIV\");\n        this.dom.line.className = \"vis-cluster-line\";\n        this.dom.line.style.display = \"none\";\n\n        // dot on axis\n        this.dom.dot = document.createElement(\"DIV\");\n        this.dom.dot.className = \"vis-cluster-dot\";\n        this.dom.dot.style.display = \"none\";\n      }\n\n      if (this.options.fitOnDoubleClick) {\n        this.dom.box.ondblclick =\n          ClusterItem.prototype._onDoubleClick.bind(this);\n      }\n\n      // attach this item as attribute\n      this.dom.box[\"vis-item\"] = this;\n\n      this.dirty = true;\n    }\n  }\n\n  /**\n   * append element to DOM\n   */\n  _appendDomElement() {\n    if (!this.parent) {\n      throw new Error(\"Cannot redraw item: no parent attached\");\n    }\n\n    if (!this.dom.box.parentNode) {\n      const foreground = this.parent.dom.foreground;\n      if (!foreground) {\n        throw new Error(\n          \"Cannot redraw item: parent has no foreground container element\",\n        );\n      }\n\n      foreground.appendChild(this.dom.box);\n    }\n\n    const background = this.parent.dom.background;\n\n    if (this.options.showStipes) {\n      if (!this.dom.line.parentNode) {\n        if (!background)\n          throw new Error(\n            \"Cannot redraw item: parent has no background container element\",\n          );\n        background.appendChild(this.dom.line);\n      }\n\n      if (!this.dom.dot.parentNode) {\n        var axis = this.parent.dom.axis;\n        if (!background)\n          throw new Error(\n            \"Cannot redraw item: parent has no axis container element\",\n          );\n        axis.appendChild(this.dom.dot);\n      }\n    }\n\n    this.displayed = true;\n  }\n\n  /**\n   * update dirty DOM components\n   */\n  _updateDirtyDomComponents() {\n    // An item is marked dirty when:\n    // - the item is not yet rendered\n    // - the item's data is changed\n    // - the item is selected/deselected\n    if (this.dirty) {\n      this._updateContents(this.dom.content);\n      this._updateDataAttributes(this.dom.box);\n      this._updateStyle(this.dom.box);\n\n      // update class\n      const className =\n        this.baseClassName +\n        \" \" +\n        (this.data.className ? \" \" + this.data.className : \"\") +\n        (this.selected ? \" vis-selected\" : \"\") +\n        \" vis-readonly\";\n      this.dom.box.className = \"vis-item \" + className;\n\n      if (this.options.showStipes) {\n        this.dom.line.className =\n          \"vis-item vis-cluster-line \" + (this.selected ? \" vis-selected\" : \"\");\n        this.dom.dot.className =\n          \"vis-item vis-cluster-dot \" + (this.selected ? \" vis-selected\" : \"\");\n      }\n\n      if (this.data.end) {\n        // turn off max-width to be able to calculate the real width\n        // this causes an extra browser repaint/reflow, but so be it\n        this.dom.content.style.maxWidth = \"none\";\n      }\n    }\n  }\n\n  /**\n   * get DOM components sizes\n   * @return {object}\n   */\n  _getDomComponentsSizes() {\n    const sizes = {\n      previous: {\n        right: this.dom.box.style.right,\n        left: this.dom.box.style.left,\n      },\n      box: {\n        width: this.dom.box.offsetWidth,\n        height: this.dom.box.offsetHeight,\n      },\n    };\n\n    if (this.options.showStipes) {\n      sizes.dot = {\n        height: this.dom.dot.offsetHeight,\n        width: this.dom.dot.offsetWidth,\n      };\n      sizes.line = {\n        width: this.dom.line.offsetWidth,\n      };\n    }\n\n    return sizes;\n  }\n\n  /**\n   * update DOM components sizes\n   * @param {object} sizes\n   */\n  _updateDomComponentsSizes(sizes) {\n    if (this.options.rtl) {\n      this.dom.box.style.right = \"0px\";\n    } else {\n      this.dom.box.style.left = \"0px\";\n    }\n\n    // recalculate size\n    if (!this.data.end) {\n      this.width = sizes.box.width;\n    } else {\n      this.minWidth = sizes.box.width;\n    }\n\n    this.height = sizes.box.height;\n\n    // restore previous position\n    if (this.options.rtl) {\n      this.dom.box.style.right = sizes.previous.right;\n    } else {\n      this.dom.box.style.left = sizes.previous.left;\n    }\n\n    this.dirty = false;\n  }\n\n  /**\n   * repaint DOM additional components\n   */\n  _repaintDomAdditionals() {\n    this._repaintOnItemUpdateTimeTooltip(this.dom.box);\n  }\n\n  /**\n   * check is stripe visible\n   * @return {number}\n   * @private\n   */\n  _isStipeVisible() {\n    return this.minWidth >= this.width || !this.data.end;\n  }\n\n  /**\n   * get fit range\n   * @return {object}\n   * @private\n   */\n  _getFitRange() {\n    const offset = (0.05 * (this.data.max - this.data.min)) / 2;\n    return {\n      fitStart: this.data.min - offset,\n      fitEnd: this.data.max + offset,\n    };\n  }\n\n  /**\n   * fit\n   * @private\n   */\n  _fit() {\n    if (this.emitter) {\n      const { fitStart, fitEnd } = this._getFitRange();\n\n      const fitArgs = {\n        start: new Date(fitStart),\n        end: new Date(fitEnd),\n        animation: true,\n      };\n\n      this.emitter.emit(\"fit\", fitArgs);\n    }\n  }\n\n  /**\n   * get item data\n   * @return {object}\n   * @private\n   */\n  _getItemData() {\n    return this.data;\n  }\n}\n\nClusterItem.prototype.baseClassName = \"vis-item vis-range vis-cluster\";\nexport default ClusterItem;\n", "import ClusterItem from \"./item/ClusterItem.js\";\n\nconst UNGROUPED = \"__ungrouped__\"; // reserved group id for ungrouped items\nconst BACKGROUND = \"__background__\"; // reserved group id for background items without group\n\nexport const ReservedGroupIds = {\n  UNGROUPED,\n  BACKGROUND,\n};\n\n/**\n * An Cluster generator generates cluster items\n */\nexport default class ClusterGenerator {\n  /**\n   * @param {ItemSet} itemSet itemsSet instance\n   * @constructor ClusterGenerator\n   */\n  constructor(itemSet) {\n    this.itemSet = itemSet;\n    this.groups = {};\n    this.cache = {};\n    this.cache[-1] = [];\n  }\n\n  /**\n   * @param {Object} itemData             Object containing parameters start content, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} [options]        Configuration options\n   * @return {Object} newItem\n   */\n  createClusterItem(itemData, conversion, options) {\n    const newItem = new ClusterItem(itemData, conversion, options);\n    return newItem;\n  }\n\n  /**\n   * Set the items to be clustered.\n   * This will clear cached clusters.\n   * @param {Item[]} items\n   * @param {Object} [options]  Available options:\n   *                            {boolean} applyOnChangedLevel\n   *                                If true (default), the changed data is applied\n   *                                as soon the cluster level changes. If false,\n   *                                The changed data is applied immediately\n   */\n  setItems(items, options) {\n    this.items = items || [];\n    this.dataChanged = true;\n    this.applyOnChangedLevel = false;\n\n    if (options && options.applyOnChangedLevel) {\n      this.applyOnChangedLevel = options.applyOnChangedLevel;\n    }\n  }\n\n  /**\n   * Update the current data set: clear cache, and recalculate the clustering for\n   * the current level\n   */\n  updateData() {\n    this.dataChanged = true;\n    this.applyOnChangedLevel = false;\n  }\n\n  /**\n   * Cluster the items which are too close together\n   * @param {array} oldClusters\n   * @param {number} scale      The scale of the current window : (windowWidth / (endDate - startDate))\n   * @param {{maxItems: number, clusterCriteria: function, titleTemplate: string}} options\n   * @return {array} clusters\n   */\n  getClusters(oldClusters, scale, options) {\n    let { maxItems, clusterCriteria } =\n      typeof options === \"boolean\" ? {} : options;\n\n    if (!clusterCriteria) {\n      clusterCriteria = () => true;\n    }\n\n    maxItems = maxItems || 1;\n\n    let level = -1;\n    let granularity = 2;\n    let timeWindow = 0;\n\n    if (scale > 0) {\n      if (scale >= 1) {\n        return [];\n      }\n\n      level = Math.abs(\n        Math.round(Math.log(100 / scale) / Math.log(granularity)),\n      );\n      timeWindow = Math.abs(Math.pow(granularity, level));\n    }\n\n    // clear the cache when and re-generate groups the data when needed.\n    if (this.dataChanged) {\n      const levelChanged = level != this.cacheLevel;\n      const applyDataNow = this.applyOnChangedLevel ? levelChanged : true;\n      if (applyDataNow) {\n        this._dropLevelsCache();\n        this._filterData();\n      }\n    }\n\n    this.cacheLevel = level;\n    let clusters = this.cache[level];\n    if (!clusters) {\n      clusters = [];\n      for (let groupName in this.groups) {\n        if (!Object.prototype.hasOwnProperty.call(this.groups, groupName))\n          continue;\n\n        const items = this.groups[groupName];\n        const iMax = items.length;\n        let i = 0;\n\n        while (i < iMax) {\n          // find all items around current item, within the timeWindow\n          let item = items[i];\n          let neighbors = 1; // start at 1, to include itself)\n\n          // loop through items left from the current item\n          let j = i - 1;\n          while (j >= 0 && item.center - items[j].center < timeWindow / 2) {\n            if (\n              !items[j].cluster &&\n              clusterCriteria(item.data, items[j].data)\n            ) {\n              neighbors++;\n            }\n            j--;\n          }\n\n          // loop through items right from the current item\n          let k = i + 1;\n          while (\n            k < items.length &&\n            items[k].center - item.center < timeWindow / 2\n          ) {\n            if (clusterCriteria(item.data, items[k].data)) {\n              neighbors++;\n            }\n            k++;\n          }\n\n          // loop through the created clusters\n          let l = clusters.length - 1;\n          while (l >= 0 && item.center - clusters[l].center < timeWindow) {\n            if (\n              item.group == clusters[l].group &&\n              clusterCriteria(item.data, clusters[l].data)\n            ) {\n              neighbors++;\n            }\n            l--;\n          }\n\n          // aggregate until the number of items is within maxItems\n          if (neighbors > maxItems) {\n            // too busy in this window.\n            const num = neighbors - maxItems + 1;\n            const clusterItems = [];\n\n            // append the items to the cluster,\n            // and calculate the average start for the cluster\n            let m = i;\n            while (clusterItems.length < num && m < items.length) {\n              if (clusterCriteria(items[i].data, items[m].data)) {\n                clusterItems.push(items[m]);\n              }\n              m++;\n            }\n\n            const groupId = this.itemSet.getGroupId(item.data);\n            const group =\n              this.itemSet.groups[groupId] ||\n              this.itemSet.groups[ReservedGroupIds.UNGROUPED];\n            let cluster = this._getClusterForItems(\n              clusterItems,\n              group,\n              oldClusters,\n              options,\n            );\n            clusters.push(cluster);\n\n            i += num;\n          } else {\n            delete item.cluster;\n            i += 1;\n          }\n        }\n      }\n\n      this.cache[level] = clusters;\n    }\n\n    return clusters;\n  }\n\n  /**\n   * Filter the items per group.\n   * @private\n   */\n  _filterData() {\n    // filter per group\n    const groups = {};\n    this.groups = groups;\n\n    // split the items per group\n    for (const item of Object.values(this.items)) {\n      // put the item in the correct group\n      const groupName = item.parent ? item.parent.groupId : \"\";\n      let group = groups[groupName];\n      if (!group) {\n        group = [];\n        groups[groupName] = group;\n      }\n      group.push(item);\n\n      // calculate the center of the item\n      if (item.data.start) {\n        if (item.data.end) {\n          // range\n          item.center =\n            (item.data.start.valueOf() + item.data.end.valueOf()) / 2;\n        } else {\n          // box, dot\n          item.center = item.data.start.valueOf();\n        }\n      }\n    }\n\n    // sort the items per group\n    for (let currentGroupName in groups) {\n      if (!Object.prototype.hasOwnProperty.call(groups, currentGroupName))\n        continue;\n      groups[currentGroupName].sort((a, b) => a.center - b.center);\n    }\n\n    this.dataChanged = false;\n  }\n\n  /**\n   * Create new cluster or return existing\n   * @private\n   * @param {array} clusterItems\n   * @param {object} group\n   * @param {array} oldClusters\n   * @param {object} options\n   * @returns {object} cluster\n   */\n  _getClusterForItems(clusterItems, group, oldClusters, options) {\n    const oldClustersLookup = (oldClusters || []).map((cluster) => ({\n      cluster,\n      itemsIds: new Set(cluster.data.uiItems.map((item) => item.id)),\n    }));\n    let cluster;\n    if (oldClustersLookup.length) {\n      for (let oldClusterData of oldClustersLookup) {\n        if (\n          oldClusterData.itemsIds.size === clusterItems.length &&\n          clusterItems.every((clusterItem) =>\n            oldClusterData.itemsIds.has(clusterItem.id),\n          )\n        ) {\n          cluster = oldClusterData.cluster;\n          break;\n        }\n      }\n    }\n\n    if (cluster) {\n      cluster.setUiItems(clusterItems);\n      if (cluster.group !== group) {\n        if (cluster.group) {\n          cluster.group.remove(cluster);\n        }\n\n        if (group) {\n          group.add(cluster);\n          cluster.group = group;\n        }\n      }\n      return cluster;\n    }\n\n    let titleTemplate = options.titleTemplate || \"\";\n    const conversion = {\n      toScreen: this.itemSet.body.util.toScreen,\n      toTime: this.itemSet.body.util.toTime,\n    };\n\n    const title = titleTemplate.replace(/{count}/, clusterItems.length);\n    const clusterContent =\n      '<div title=\"' + title + '\">' + clusterItems.length + \"</div>\";\n    const clusterOptions = Object.assign({}, options, this.itemSet.options);\n    const data = {\n      content: clusterContent,\n      title: title,\n      group: group,\n      uiItems: clusterItems,\n      eventEmitter: this.itemSet.body.emitter,\n      range: this.itemSet.body.range,\n    };\n    cluster = this.createClusterItem(data, conversion, clusterOptions);\n\n    if (group) {\n      group.add(cluster);\n      cluster.group = group;\n    }\n\n    cluster.attach();\n\n    return cluster;\n  }\n\n  /**\n   * Drop cache\n   * @private\n   */\n  _dropLevelsCache() {\n    this.cache = {};\n    this.cacheLevel = -1;\n    this.cache[this.cacheLevel] = [];\n  }\n}\n", "import Hammer from \"../../module/hammer.js\";\nimport util, {\n  typeCoerceDataSet,\n  randomUUID,\n  isDataViewLike,\n} from \"../../util.js\";\nimport TimeStep from \"../TimeStep.js\";\nimport Component from \"./Component.js\";\nimport Group from \"./Group.js\";\nimport BackgroundGroup from \"./BackgroundGroup.js\";\nimport BoxItem from \"./item/BoxItem.js\";\nimport PointItem from \"./item/PointItem.js\";\nimport RangeItem from \"./item/RangeItem.js\";\nimport BackgroundItem from \"./item/BackgroundItem.js\";\nimport Popup from \"../../shared/Popup.js\";\nimport ClusterGenerator from \"./ClusterGenerator.js\";\n\nconst UNGROUPED = \"__ungrouped__\"; // reserved group id for ungrouped items\nconst BACKGROUND = \"__background__\"; // reserved group id for background items without group\n\nexport const ReservedGroupIds = {\n  UNGROUPED,\n  BACKGROUND,\n};\n\n/**\n * An ItemSet holds a set of items and ranges which can be displayed in a\n * range. The width is determined by the parent of the ItemSet, and the height\n * is determined by the size of the items.\n */\nclass ItemSet extends Component {\n  /**\n   * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body\n   * @param {Object} [options]      See ItemSet.setOptions for the available options.\n   * @constructor ItemSet\n   * @extends Component\n   */\n  constructor(body, options) {\n    super();\n    this.body = body;\n    this.defaultOptions = {\n      type: null, // 'box', 'point', 'range', 'background'\n      orientation: {\n        item: \"bottom\", // item orientation: 'top' or 'bottom'\n      },\n      align: \"auto\", // alignment of box items\n      stack: true,\n      stackSubgroups: true,\n      groupOrderSwap(fromGroup, toGroup) {\n        const targetOrder = toGroup.order;\n        toGroup.order = fromGroup.order;\n        fromGroup.order = targetOrder;\n      },\n      groupOrder: \"order\",\n\n      selectable: true,\n      multiselect: false,\n      longSelectPressTime: 251,\n      itemsAlwaysDraggable: {\n        item: false,\n        range: false,\n      },\n\n      editable: {\n        updateTime: false,\n        updateGroup: false,\n        add: false,\n        remove: false,\n        overrideItems: false,\n      },\n\n      groupEditable: {\n        order: false,\n        add: false,\n        remove: false,\n      },\n\n      snap: TimeStep.snap,\n\n      // Only called when `objectData.target === 'item'.\n      onDropObjectOnItem(_objectData, item, callback) {\n        callback(item);\n      },\n      onAdd(item, callback) {\n        callback(item);\n      },\n      onUpdate(item, callback) {\n        callback(item);\n      },\n      onMove(item, callback) {\n        callback(item);\n      },\n      onRemove(item, callback) {\n        callback(item);\n      },\n      onMoving(item, callback) {\n        callback(item);\n      },\n      onAddGroup(item, callback) {\n        callback(item);\n      },\n      onMoveGroup(item, callback) {\n        callback(item);\n      },\n      onRemoveGroup(item, callback) {\n        callback(item);\n      },\n\n      margin: {\n        item: {\n          horizontal: 10,\n          vertical: 10,\n        },\n        axis: 20,\n      },\n\n      showTooltips: true,\n\n      tooltip: {\n        followMouse: false,\n        overflowMethod: \"flip\",\n        delay: 500,\n      },\n\n      tooltipOnItemUpdateTime: false,\n    };\n\n    // options is shared by this ItemSet and all its items\n    this.options = util.extend({}, this.defaultOptions);\n    this.options.rtl = options.rtl;\n    this.options.onTimeout = options.onTimeout;\n\n    this.conversion = {\n      toScreen: body.util.toScreen,\n      toTime: body.util.toTime,\n    };\n    this.dom = {};\n    this.props = {};\n    this.hammer = null;\n\n    const me = this;\n    this.itemsData = null; // DataSet\n    this.groupsData = null; // DataSet\n    this.itemsSettingTime = null;\n    this.initialItemSetDrawn = false;\n    this.userContinueNotBail = null;\n\n    this.sequentialSelection = false;\n\n    // listeners for the DataSet of the items\n    this.itemListeners = {\n      add(_event, params) {\n        me._onAdd(params.items);\n        if (me.options.cluster) {\n          me.clusterGenerator.setItems(me.items, {\n            applyOnChangedLevel: false,\n          });\n        }\n        me.redraw();\n      },\n      update(_event, params) {\n        me._onUpdate(params.items);\n        if (me.options.cluster) {\n          me.clusterGenerator.setItems(me.items, {\n            applyOnChangedLevel: false,\n          });\n        }\n        me.redraw();\n      },\n      remove(_event, params) {\n        me._onRemove(params.items);\n        if (me.options.cluster) {\n          me.clusterGenerator.setItems(me.items, {\n            applyOnChangedLevel: false,\n          });\n        }\n        me.redraw();\n      },\n    };\n\n    // listeners for the DataSet of the groups\n    this.groupListeners = {\n      add(_event, params, senderId) {\n        me._onAddGroups(params.items);\n\n        if (me.groupsData && me.groupsData.length > 0) {\n          const groupsData = me.groupsData.getDataSet();\n          groupsData.get().forEach((groupData) => {\n            if (groupData.nestedGroups) {\n              if (groupData.showNested != false) {\n                groupData.showNested = true;\n              }\n              let updatedGroups = [];\n              groupData.nestedGroups.forEach((nestedGroupId) => {\n                const updatedNestedGroup = groupsData.get(nestedGroupId);\n                if (!updatedNestedGroup) {\n                  return;\n                }\n                updatedNestedGroup.nestedInGroup = groupData.id;\n                if (groupData.showNested == false) {\n                  updatedNestedGroup.visible = false;\n                }\n                updatedGroups = updatedGroups.concat(updatedNestedGroup);\n              });\n              groupsData.update(updatedGroups, senderId);\n            }\n          });\n        }\n      },\n      update(_event, params) {\n        me._onUpdateGroups(params.items);\n      },\n      remove(_event, params) {\n        me._onRemoveGroups(params.items);\n      },\n    };\n\n    this.items = {}; // object with an Item for every data item\n    this.groups = {}; // Group object for every group\n    this.groupIds = [];\n\n    this.selection = []; // list with the ids of all selected nodes\n\n    this.popup = null;\n    this.popupTimer = null;\n\n    this.touchParams = {}; // stores properties while dragging\n    this.groupTouchParams = {\n      group: null,\n      isDragging: false,\n    };\n\n    // create the HTML DOM\n    this._create();\n\n    this.setOptions(options);\n    this.clusters = [];\n  }\n\n  /**\n   * Create the HTML DOM for the ItemSet\n   */\n  _create() {\n    const frame = document.createElement(\"div\");\n    frame.className = \"vis-itemset\";\n    frame[\"vis-itemset\"] = this;\n    this.dom.frame = frame;\n\n    // create background panel\n    const background = document.createElement(\"div\");\n    background.className = \"vis-background\";\n    frame.appendChild(background);\n    this.dom.background = background;\n\n    // create foreground panel\n    const foreground = document.createElement(\"div\");\n    foreground.className = \"vis-foreground\";\n    frame.appendChild(foreground);\n    this.dom.foreground = foreground;\n\n    // create axis panel\n    const axis = document.createElement(\"div\");\n    axis.className = \"vis-axis\";\n    this.dom.axis = axis;\n\n    // create labelset\n    const labelSet = document.createElement(\"div\");\n    labelSet.className = \"vis-labelset\";\n    this.dom.labelSet = labelSet;\n\n    // create ungrouped Group\n    this._updateUngrouped();\n\n    // create background Group\n    const backgroundGroup = new BackgroundGroup(BACKGROUND, null, this);\n    backgroundGroup.show();\n    this.groups[BACKGROUND] = backgroundGroup;\n\n    // attach event listeners\n    // Note: we bind to the centerContainer for the case where the height\n    //       of the center container is larger than of the ItemSet, so we\n    //       can click in the empty area to create a new item or deselect an item.\n    this.hammer = new Hammer(this.body.dom.centerContainer);\n\n    // drag items when selected\n    this.hammer.on(\"hammer.input\", (event) => {\n      if (event.isFirst) {\n        this._onTouch(event);\n      }\n    });\n    this.hammer.on(\"panstart\", this._onDragStart.bind(this));\n    this.hammer.on(\"panmove\", this._onDrag.bind(this));\n    this.hammer.on(\"panend\", this._onDragEnd.bind(this));\n    this.hammer.get(\"pan\").set({ threshold: 5, direction: Hammer.ALL });\n    // delay addition on item click for trackpads...\n    this.hammer.get(\"press\").set({ time: 10000 });\n\n    // single select (or unselect) when tapping an item\n    this.hammer.on(\"tap\", this._onSelectItem.bind(this));\n\n    // multi select when holding mouse/touch, or on ctrl+click\n    this.hammer.on(\"press\", this._onMultiSelectItem.bind(this));\n    // delay addition on item click for trackpads...\n    this.hammer.get(\"press\").set({ time: 10000 });\n\n    // add item on doubletap\n    this.hammer.on(\"doubletap\", this._onAddItem.bind(this));\n\n    if (this.options.rtl) {\n      this.groupHammer = new Hammer(this.body.dom.rightContainer);\n    } else {\n      this.groupHammer = new Hammer(this.body.dom.leftContainer);\n    }\n\n    this.groupHammer.on(\"tap\", this._onGroupClick.bind(this));\n    this.groupHammer.on(\"panstart\", this._onGroupDragStart.bind(this));\n    this.groupHammer.on(\"panmove\", this._onGroupDrag.bind(this));\n    this.groupHammer.on(\"panend\", this._onGroupDragEnd.bind(this));\n    this.groupHammer\n      .get(\"pan\")\n      .set({ threshold: 5, direction: Hammer.DIRECTION_VERTICAL });\n\n    this.body.dom.centerContainer.addEventListener(\n      \"mouseover\",\n      this._onMouseOver.bind(this),\n    );\n    this.body.dom.centerContainer.addEventListener(\n      \"mouseout\",\n      this._onMouseOut.bind(this),\n    );\n    this.body.dom.centerContainer.addEventListener(\n      \"mousemove\",\n      this._onMouseMove.bind(this),\n    );\n    // right-click on timeline\n    this.body.dom.centerContainer.addEventListener(\n      \"contextmenu\",\n      this._onDragEnd.bind(this),\n    );\n\n    this.body.dom.centerContainer.addEventListener(\n      \"mousewheel\",\n      this._onMouseWheel.bind(this),\n    );\n\n    // attach to the DOM\n    this.show();\n  }\n\n  /**\n   * Set options for the ItemSet. Existing options will be extended/overwritten.\n   * @param {Object} [options] The following options are available:\n   *                           {string} type\n   *                              Default type for the items. Choose from 'box'\n   *                              (default), 'point', 'range', or 'background'.\n   *                              The default style can be overwritten by\n   *                              individual items.\n   *                           {string} align\n   *                              Alignment for the items, only applicable for\n   *                              BoxItem. Choose 'center' (default), 'left', or\n   *                              'right'.\n   *                           {string} orientation.item\n   *                              Orientation of the item set. Choose 'top' or\n   *                              'bottom' (default).\n   *                           {Function} groupOrder\n   *                              A sorting function for ordering groups\n   *                           {boolean} stack\n   *                              If true (default), items will be stacked on\n   *                              top of each other.\n   *                           {number} margin.axis\n   *                              Margin between the axis and the items in pixels.\n   *                              Default is 20.\n   *                           {number} margin.item.horizontal\n   *                              Horizontal margin between items in pixels.\n   *                              Default is 10.\n   *                           {number} margin.item.vertical\n   *                              Vertical Margin between items in pixels.\n   *                              Default is 10.\n   *                           {number} margin.item\n   *                              Margin between items in pixels in both horizontal\n   *                              and vertical direction. Default is 10.\n   *                           {number} margin\n   *                              Set margin for both axis and items in pixels.\n   *                           {boolean} selectable\n   *                              If true (default), items can be selected.\n   *                           {boolean} multiselect\n   *                              If true, multiple items can be selected.\n   *                              False by default.\n   *                           {boolean} editable\n   *                              Set all editable options to true or false\n   *                           {boolean} editable.updateTime\n   *                              Allow dragging an item to an other moment in time\n   *                           {boolean} editable.updateGroup\n   *                              Allow dragging an item to an other group\n   *                           {boolean} editable.add\n   *                              Allow creating new items on double tap\n   *                           {boolean} editable.remove\n   *                              Allow removing items by clicking the delete button\n   *                              top right of a selected item.\n   *                           {Function(item: Item, callback: Function)} onAdd\n   *                              Callback function triggered when an item is about to be added:\n   *                              when the user double taps an empty space in the Timeline.\n   *                           {Function(item: Item, callback: Function)} onUpdate\n   *                              Callback function fired when an item is about to be updated.\n   *                              This function typically has to show a dialog where the user\n   *                              change the item. If not implemented, nothing happens.\n   *                           {Function(item: Item, callback: Function)} onMove\n   *                              Fired when an item has been moved. If not implemented,\n   *                              the move action will be accepted.\n   *                           {Function(item: Item, callback: Function)} onRemove\n   *                              Fired when an item is about to be deleted.\n   *                              If not implemented, the item will be always removed.\n   */\n  setOptions(options) {\n    if (options) {\n      // copy all options that we know\n      const fields = [\n        \"type\",\n        \"rtl\",\n        \"align\",\n        \"order\",\n        \"stack\",\n        \"stackSubgroups\",\n        \"selectable\",\n        \"multiselect\",\n        \"sequentialSelection\",\n        \"multiselectPerGroup\",\n        \"longSelectPressTime\",\n        \"groupOrder\",\n        \"dataAttributes\",\n        \"template\",\n        \"groupTemplate\",\n        \"visibleFrameTemplate\",\n        \"hide\",\n        \"snap\",\n        \"groupOrderSwap\",\n        \"showTooltips\",\n        \"tooltip\",\n        \"tooltipOnItemUpdateTime\",\n        \"groupHeightMode\",\n        \"onTimeout\",\n      ];\n      util.selectiveExtend(fields, this.options, options);\n\n      if (\"itemsAlwaysDraggable\" in options) {\n        if (typeof options.itemsAlwaysDraggable === \"boolean\") {\n          this.options.itemsAlwaysDraggable.item = options.itemsAlwaysDraggable;\n          this.options.itemsAlwaysDraggable.range = false;\n        } else if (typeof options.itemsAlwaysDraggable === \"object\") {\n          util.selectiveExtend(\n            [\"item\", \"range\"],\n            this.options.itemsAlwaysDraggable,\n            options.itemsAlwaysDraggable,\n          );\n          // only allow range always draggable when item is always draggable as well\n          if (!this.options.itemsAlwaysDraggable.item) {\n            this.options.itemsAlwaysDraggable.range = false;\n          }\n        }\n      }\n\n      if (\"sequentialSelection\" in options) {\n        if (typeof options.sequentialSelection === \"boolean\") {\n          this.options.sequentialSelection = options.sequentialSelection;\n        }\n      }\n\n      if (\"orientation\" in options) {\n        if (typeof options.orientation === \"string\") {\n          this.options.orientation.item =\n            options.orientation === \"top\" ? \"top\" : \"bottom\";\n        } else if (\n          typeof options.orientation === \"object\" &&\n          \"item\" in options.orientation\n        ) {\n          this.options.orientation.item = options.orientation.item;\n        }\n      }\n\n      if (\"margin\" in options) {\n        if (typeof options.margin === \"number\") {\n          this.options.margin.axis = options.margin;\n          this.options.margin.item.horizontal = options.margin;\n          this.options.margin.item.vertical = options.margin;\n        } else if (typeof options.margin === \"object\") {\n          util.selectiveExtend([\"axis\"], this.options.margin, options.margin);\n          if (\"item\" in options.margin) {\n            if (typeof options.margin.item === \"number\") {\n              this.options.margin.item.horizontal = options.margin.item;\n              this.options.margin.item.vertical = options.margin.item;\n            } else if (typeof options.margin.item === \"object\") {\n              util.selectiveExtend(\n                [\"horizontal\", \"vertical\"],\n                this.options.margin.item,\n                options.margin.item,\n              );\n            }\n          }\n        }\n      }\n\n      [\"locale\", \"locales\"].forEach((key) => {\n        if (key in options) {\n          this.options[key] = options[key];\n        }\n      });\n\n      if (\"editable\" in options) {\n        if (typeof options.editable === \"boolean\") {\n          this.options.editable.updateTime = options.editable;\n          this.options.editable.updateGroup = options.editable;\n          this.options.editable.add = options.editable;\n          this.options.editable.remove = options.editable;\n          this.options.editable.overrideItems = false;\n        } else if (typeof options.editable === \"object\") {\n          util.selectiveExtend(\n            [\"updateTime\", \"updateGroup\", \"add\", \"remove\", \"overrideItems\"],\n            this.options.editable,\n            options.editable,\n          );\n        }\n      }\n\n      if (\"groupEditable\" in options) {\n        if (typeof options.groupEditable === \"boolean\") {\n          this.options.groupEditable.order = options.groupEditable;\n          this.options.groupEditable.add = options.groupEditable;\n          this.options.groupEditable.remove = options.groupEditable;\n        } else if (typeof options.groupEditable === \"object\") {\n          util.selectiveExtend(\n            [\"order\", \"add\", \"remove\"],\n            this.options.groupEditable,\n            options.groupEditable,\n          );\n        }\n      }\n\n      // callback functions\n      const addCallback = (name) => {\n        const fn = options[name];\n        if (fn) {\n          if (!(typeof fn === \"function\")) {\n            throw new Error(\n              `option ${name} must be a function ${name}(item, callback)`,\n            );\n          }\n          this.options[name] = fn;\n        }\n      };\n      [\n        \"onDropObjectOnItem\",\n        \"onAdd\",\n        \"onUpdate\",\n        \"onRemove\",\n        \"onMove\",\n        \"onMoving\",\n        \"onAddGroup\",\n        \"onMoveGroup\",\n        \"onRemoveGroup\",\n      ].forEach(addCallback);\n\n      if (options.cluster) {\n        Object.assign(this.options, {\n          cluster: options.cluster,\n        });\n        if (!this.clusterGenerator) {\n          this.clusterGenerator = new ClusterGenerator(this);\n        }\n        this.clusterGenerator.setItems(this.items, {\n          applyOnChangedLevel: false,\n        });\n        this.markDirty({ refreshItems: true, restackGroups: true });\n\n        this.redraw();\n      } else if (this.clusterGenerator) {\n        this._detachAllClusters();\n        this.clusters = [];\n        this.clusterGenerator = null;\n        this.options.cluster = undefined;\n        this.markDirty({ refreshItems: true, restackGroups: true });\n\n        this.redraw();\n      } else {\n        // force the itemSet to refresh: options like orientation and margins may be changed\n        this.markDirty();\n      }\n    }\n  }\n\n  /**\n   * Mark the ItemSet dirty so it will refresh everything with next redraw.\n   * Optionally, all items can be marked as dirty and be refreshed.\n   * @param {{refreshItems: boolean}} [options]\n   */\n  markDirty(options) {\n    this.groupIds = [];\n\n    if (options) {\n      if (options.refreshItems) {\n        util.forEach(this.items, (item) => {\n          item.dirty = true;\n          if (item.displayed) item.redraw();\n        });\n      }\n\n      if (options.restackGroups) {\n        util.forEach(this.groups, (group, key) => {\n          if (key === BACKGROUND) return;\n          group.stackDirty = true;\n        });\n      }\n    }\n  }\n\n  /**\n   * Destroy the ItemSet\n   */\n  destroy() {\n    this.clearPopupTimer();\n    this.hide();\n    this.setItems(null);\n    this.setGroups(null);\n\n    this.hammer && this.hammer.destroy();\n    this.groupHammer && this.groupHammer.destroy();\n    this.hammer = null;\n\n    this.body = null;\n    this.conversion = null;\n  }\n\n  /**\n   * Hide the component from the DOM\n   */\n  hide() {\n    // remove the frame containing the items\n    if (this.dom.frame.parentNode) {\n      this.dom.frame.parentNode.removeChild(this.dom.frame);\n    }\n\n    // remove the axis with dots\n    if (this.dom.axis.parentNode) {\n      this.dom.axis.parentNode.removeChild(this.dom.axis);\n    }\n\n    // remove the labelset containing all group labels\n    if (this.dom.labelSet.parentNode) {\n      this.dom.labelSet.parentNode.removeChild(this.dom.labelSet);\n    }\n  }\n\n  /**\n   * Show the component in the DOM (when not already visible).\n   */\n  show() {\n    // show frame containing the items\n    if (!this.dom.frame.parentNode) {\n      this.body.dom.center.appendChild(this.dom.frame);\n    }\n\n    // show axis with dots\n    if (!this.dom.axis.parentNode) {\n      this.body.dom.backgroundVertical.appendChild(this.dom.axis);\n    }\n\n    // show labelset containing labels\n    if (!this.dom.labelSet.parentNode) {\n      if (this.options.rtl) {\n        this.body.dom.right.appendChild(this.dom.labelSet);\n      } else {\n        this.body.dom.left.appendChild(this.dom.labelSet);\n      }\n    }\n  }\n\n  /**\n   * Activates the popup timer to show the given popup after a fixed time.\n   * @param {Popup} popup\n   */\n  setPopupTimer(popup) {\n    this.clearPopupTimer();\n    if (popup) {\n      const delay =\n        this.options.tooltip.delay ||\n        typeof this.options.tooltip.delay === \"number\"\n          ? this.options.tooltip.delay\n          : 500;\n      this.popupTimer = setTimeout(function () {\n        popup.show();\n      }, delay);\n    }\n  }\n\n  /**\n   * Clears the popup timer for the tooltip.\n   */\n  clearPopupTimer() {\n    if (this.popupTimer != null) {\n      clearTimeout(this.popupTimer);\n      this.popupTimer = null;\n    }\n  }\n\n  /**\n   * Set selected items by their id. Replaces the current selection\n   * Unknown id's are silently ignored.\n   * @param {string[] | string} [ids] An array with zero or more id's of the items to be\n   *                                  selected, or a single item id. If ids is undefined\n   *                                  or an empty array, all items will be unselected.\n   */\n  setSelection(ids) {\n    if (ids == undefined) {\n      ids = [];\n    }\n\n    if (!Array.isArray(ids)) {\n      ids = [ids];\n    }\n\n    const idsToDeselect = this.selection.filter((id) => ids.indexOf(id) === -1);\n\n    // unselect currently selected items\n    for (let selectedId of idsToDeselect) {\n      const item = this.getItemById(selectedId);\n      if (item) {\n        item.unselect();\n      }\n    }\n\n    // select items\n    this.selection = [...ids];\n    for (let id of ids) {\n      const item = this.getItemById(id);\n      if (item) {\n        item.select();\n      }\n    }\n  }\n\n  /**\n   * Get the selected items by their id\n   * @return {Array} ids  The ids of the selected items\n   */\n  getSelection() {\n    return this.selection.concat([]);\n  }\n\n  /**\n   * Get the id's of the currently visible items.\n   * @returns {Array} The ids of the visible items\n   */\n  getVisibleItems() {\n    const range = this.body.range.getRange();\n    let right;\n    let left;\n\n    if (this.options.rtl) {\n      right = this.body.util.toScreen(range.start);\n      left = this.body.util.toScreen(range.end);\n    } else {\n      left = this.body.util.toScreen(range.start);\n      right = this.body.util.toScreen(range.end);\n    }\n\n    const ids = [];\n    for (const groupId in this.groups) {\n      if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) continue;\n\n      const group = this.groups[groupId];\n      const rawVisibleItems = group.isVisible ? group.visibleItems : [];\n\n      // filter the \"raw\" set with visibleItems into a set which is really\n      // visible by pixels\n      for (const item of rawVisibleItems) {\n        // TODO: also check whether visible vertically\n        if (this.options.rtl) {\n          if (item.right < left && item.right + item.width > right) {\n            ids.push(item.id);\n          }\n        } else {\n          if (item.left < right && item.left + item.width > left) {\n            ids.push(item.id);\n          }\n        }\n      }\n    }\n\n    return ids;\n  }\n\n  /**\n   * Get the id's of the items at specific time, where a click takes place on the timeline.\n   * @param {Date} timeOfEvent The point in time to query items.\n   * @returns {Array} The ids of all items in existence at the time of click event on the timeline.\n   */\n  getItemsAtCurrentTime(timeOfEvent) {\n    let right;\n    let left;\n\n    if (this.options.rtl) {\n      right = this.body.util.toScreen(timeOfEvent);\n      left = this.body.util.toScreen(timeOfEvent);\n    } else {\n      left = this.body.util.toScreen(timeOfEvent);\n      right = this.body.util.toScreen(timeOfEvent);\n    }\n\n    const ids = [];\n    for (const groupId in this.groups) {\n      if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) continue;\n\n      const group = this.groups[groupId];\n      const rawVisibleItems = group.isVisible ? group.visibleItems : [];\n\n      // filter the \"raw\" set with visibleItems into a set which is really\n      // visible by pixels\n      for (const item of rawVisibleItems) {\n        if (this.options.rtl) {\n          if (item.right < left && item.right + item.width > right) {\n            ids.push(item.id);\n          }\n        } else {\n          if (item.left < right && item.left + item.width > left) {\n            ids.push(item.id);\n          }\n        }\n      }\n    }\n\n    return ids;\n  }\n\n  /**\n   * Get the id's of the currently visible groups.\n   * @returns {Array} The ids of the visible groups\n   */\n  getVisibleGroups() {\n    const ids = [];\n\n    for (const groupId in this.groups) {\n      if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) continue;\n\n      const group = this.groups[groupId];\n      if (group.isVisible) ids.push(groupId);\n    }\n\n    return ids;\n  }\n\n  /**\n   * get item by id\n   * @param {string} id\n   * @return {object} item\n   */\n  getItemById(id) {\n    return this.items[id] || this.clusters.find((cluster) => cluster.id === id);\n  }\n\n  /**\n   * Deselect a selected item\n   * @param {string | number} id\n   * @private\n   */\n  _deselect(id) {\n    const selection = this.selection;\n    for (let i = 0, ii = selection.length; i < ii; i++) {\n      if (selection[i] == id) {\n        // non-strict comparison!\n        selection.splice(i, 1);\n        break;\n      }\n    }\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    const margin = this.options.margin;\n    const range = this.body.range;\n    const asSize = util.option.asSize;\n    const options = this.options;\n    const orientation = options.orientation.item;\n    let resized = false;\n    const frame = this.dom.frame;\n\n    // recalculate absolute position (before redrawing groups)\n    this.props.top =\n      this.body.domProps.top.height + this.body.domProps.border.top;\n\n    if (this.options.rtl) {\n      this.props.right =\n        this.body.domProps.right.width + this.body.domProps.border.right;\n    } else {\n      this.props.left =\n        this.body.domProps.left.width + this.body.domProps.border.left;\n    }\n\n    // update class name\n    frame.className = \"vis-itemset\";\n\n    if (this.options.cluster) {\n      this._clusterItems();\n    }\n\n    // reorder the groups (if needed)\n    resized = this._orderGroups() || resized;\n\n    // check whether zoomed (in that case we need to re-stack everything)\n    // TODO: would be nicer to get this as a trigger from Range\n    const visibleInterval = range.end - range.start;\n    const zoomed =\n      visibleInterval != this.lastVisibleInterval ||\n      this.props.width != this.props.lastWidth;\n    const scrolled = range.start != this.lastRangeStart;\n    const changedStackOption = options.stack != this.lastStack;\n    const changedStackSubgroupsOption =\n      options.stackSubgroups != this.lastStackSubgroups;\n    const forceRestack =\n      zoomed || scrolled || changedStackOption || changedStackSubgroupsOption;\n    this.lastVisibleInterval = visibleInterval;\n    this.lastRangeStart = range.start;\n    this.lastStack = options.stack;\n    this.lastStackSubgroups = options.stackSubgroups;\n\n    this.props.lastWidth = this.props.width;\n    const firstGroup = this._firstGroup();\n    const firstMargin = {\n      item: margin.item,\n      axis: margin.axis,\n    };\n    const nonFirstMargin = {\n      item: margin.item,\n      axis: margin.item.vertical / 2,\n    };\n    let height = 0;\n    const minHeight = margin.axis + margin.item.vertical;\n\n    // redraw the background group\n    this.groups[BACKGROUND].redraw(range, nonFirstMargin, forceRestack);\n\n    const redrawQueue = {};\n    let redrawQueueLength = 0;\n\n    // collect redraw functions\n    util.forEach(this.groups, (group, key) => {\n      if (key === BACKGROUND) return;\n      const groupMargin = group == firstGroup ? firstMargin : nonFirstMargin;\n      const returnQueue = true;\n      redrawQueue[key] = group.redraw(\n        range,\n        groupMargin,\n        forceRestack,\n        returnQueue,\n      );\n      redrawQueueLength = redrawQueue[key].length;\n    });\n\n    const needRedraw = redrawQueueLength > 0;\n    if (needRedraw) {\n      const redrawResults = {};\n\n      for (let i = 0; i < redrawQueueLength; i++) {\n        util.forEach(redrawQueue, (fns, key) => {\n          redrawResults[key] = fns[i]();\n        });\n      }\n\n      // redraw all regular groups\n      util.forEach(this.groups, (group, key) => {\n        if (key === BACKGROUND) return;\n        const groupResized = redrawResults[key];\n        resized = groupResized || resized;\n        height += group.height;\n      });\n      height = Math.max(height, minHeight);\n    }\n\n    height = Math.max(height, minHeight);\n\n    // update frame height\n    frame.style.height = asSize(height);\n\n    // calculate actual size\n    this.props.width = frame.offsetWidth;\n    this.props.height = height;\n\n    // reposition axis\n    this.dom.axis.style.top = asSize(\n      orientation == \"top\"\n        ? this.body.domProps.top.height + this.body.domProps.border.top\n        : this.body.domProps.top.height +\n            this.body.domProps.centerContainer.height,\n    );\n    if (this.options.rtl) {\n      this.dom.axis.style.right = \"0\";\n    } else {\n      this.dom.axis.style.left = \"0\";\n    }\n\n    this.hammer.get(\"press\").set({ time: this.options.longSelectPressTime });\n\n    this.initialItemSetDrawn = true;\n    // check if this component is resized\n    resized = this._isResized() || resized;\n\n    return resized;\n  }\n\n  /**\n   * Get the first group, aligned with the axis\n   * @return {Group | null} firstGroup\n   * @private\n   */\n  _firstGroup() {\n    const firstGroupIndex =\n      this.options.orientation.item == \"top\" ? 0 : this.groupIds.length - 1;\n    const firstGroupId = this.groupIds[firstGroupIndex];\n    const firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED];\n\n    return firstGroup || null;\n  }\n\n  /**\n   * Create or delete the group holding all ungrouped items. This group is used when\n   * there are no groups specified.\n   * @protected\n   */\n  _updateUngrouped() {\n    let ungrouped = this.groups[UNGROUPED];\n    let item;\n    let itemId;\n\n    if (this.groupsData) {\n      // remove the group holding all ungrouped items\n      if (ungrouped) {\n        ungrouped.dispose();\n        delete this.groups[UNGROUPED];\n\n        for (itemId in this.items) {\n          if (!Object.prototype.hasOwnProperty.call(this.items, itemId))\n            continue;\n          item = this.items[itemId];\n          item.parent && item.parent.remove(item);\n          const groupId = this.getGroupId(item.data);\n          const group = this.groups[groupId];\n          (group && group.add(item)) || item.hide();\n        }\n      }\n    } else {\n      // create a group holding all (unfiltered) items\n      if (!ungrouped) {\n        const id = null;\n        const data = null;\n        ungrouped = new Group(id, data, this);\n        this.groups[UNGROUPED] = ungrouped;\n\n        for (itemId in this.items) {\n          if (!Object.prototype.hasOwnProperty.call(this.items, itemId))\n            continue;\n          item = this.items[itemId];\n          ungrouped.add(item);\n        }\n\n        ungrouped.show();\n      }\n    }\n  }\n\n  /**\n   * Get the element for the labelset\n   * @return {HTMLElement} labelSet\n   */\n  getLabelSet() {\n    return this.dom.labelSet;\n  }\n\n  /**\n   * Set items\n   * @param {vis.DataSet | null} items\n   */\n  setItems(items) {\n    this.itemsSettingTime = new Date();\n    const me = this;\n    let ids;\n    const oldItemsData = this.itemsData;\n\n    // replace the dataset\n    if (!items) {\n      this.itemsData = null;\n    } else if (isDataViewLike(items)) {\n      this.itemsData = typeCoerceDataSet(items);\n    } else {\n      throw new TypeError(\n        \"Data must implement the interface of DataSet or DataView\",\n      );\n    }\n\n    if (oldItemsData) {\n      // unsubscribe from old dataset\n      util.forEach(this.itemListeners, (callback, event) => {\n        oldItemsData.off(event, callback);\n      });\n\n      // stop maintaining a coerced version of the old data set\n      oldItemsData.dispose();\n\n      // remove all drawn items\n      ids = oldItemsData.getIds();\n      this._onRemove(ids);\n    }\n\n    if (this.itemsData) {\n      // subscribe to new dataset\n      const id = this.id;\n      util.forEach(this.itemListeners, (callback, event) => {\n        me.itemsData.on(event, callback, id);\n      });\n\n      // add all new items\n      ids = this.itemsData.getIds();\n      this._onAdd(ids);\n\n      // update the group holding all ungrouped items\n      this._updateUngrouped();\n    }\n\n    this.body.emitter.emit(\"_change\", { queue: true });\n  }\n\n  /**\n   * Get the current items\n   * @returns {vis.DataSet | null}\n   */\n  getItems() {\n    return this.itemsData != null ? this.itemsData.rawDS : null;\n  }\n\n  /**\n   * Set groups\n   * @param {vis.DataSet} groups\n   */\n  setGroups(groups) {\n    const me = this;\n    let ids;\n\n    // unsubscribe from current dataset\n    if (this.groupsData) {\n      util.forEach(this.groupListeners, (callback, event) => {\n        me.groupsData.off(event, callback);\n      });\n\n      // remove all drawn groups\n      ids = this.groupsData.getIds();\n      this.groupsData = null;\n      this._onRemoveGroups(ids); // note: this will cause a redraw\n    }\n\n    // replace the dataset\n    if (!groups) {\n      this.groupsData = null;\n    } else if (isDataViewLike(groups)) {\n      this.groupsData = groups;\n    } else {\n      throw new TypeError(\n        \"Data must implement the interface of DataSet or DataView\",\n      );\n    }\n\n    if (this.groupsData) {\n      // go over all groups nesting\n      const groupsData = this.groupsData.getDataSet();\n\n      groupsData.get().forEach((group) => {\n        if (group.nestedGroups) {\n          group.nestedGroups.forEach((nestedGroupId) => {\n            const updatedNestedGroup = groupsData.get(nestedGroupId);\n            updatedNestedGroup.nestedInGroup = group.id;\n            if (group.showNested == false) {\n              updatedNestedGroup.visible = false;\n            }\n            groupsData.update(updatedNestedGroup);\n          });\n        }\n      });\n\n      // subscribe to new dataset\n      const id = this.id;\n      util.forEach(this.groupListeners, (callback, event) => {\n        me.groupsData.on(event, callback, id);\n      });\n\n      // draw all ms\n      ids = this.groupsData.getIds();\n      this._onAddGroups(ids);\n    }\n\n    // update the group holding all ungrouped items\n    this._updateUngrouped();\n\n    // update the order of all items in each group\n    this._order();\n\n    if (this.options.cluster) {\n      this.clusterGenerator.updateData();\n      this._clusterItems();\n      this.markDirty({ refreshItems: true, restackGroups: true });\n    }\n\n    this.body.emitter.emit(\"_change\", { queue: true });\n  }\n\n  /**\n   * Get the current groups\n   * @returns {vis.DataSet | null} groups\n   */\n  getGroups() {\n    return this.groupsData;\n  }\n\n  /**\n   * Remove an item by its id\n   * @param {string | number} id\n   */\n  removeItem(id) {\n    const item = this.itemsData.get(id);\n\n    if (item) {\n      // confirm deletion\n      this.options.onRemove(item, (item) => {\n        if (item) {\n          // remove by id here, it is possible that an item has no id defined\n          // itself, so better not delete by the item itself\n          this.itemsData.remove(id);\n        }\n      });\n    }\n  }\n\n  /**\n   * Get the time of an item based on it's data and options.type\n   * @param {Object} itemData\n   * @returns {string} Returns the type\n   * @private\n   */\n  _getType(itemData) {\n    return (\n      itemData.type || this.options.type || (itemData.end ? \"range\" : \"box\")\n    );\n  }\n\n  /**\n   * Get the group id for an item\n   * @param {Object} itemData\n   * @returns {string} Returns the groupId\n   * @private\n   */\n  getGroupId(itemData) {\n    const type = this._getType(itemData);\n    if (type == \"background\" && itemData.group == undefined) {\n      return BACKGROUND;\n    } else {\n      return this.groupsData ? itemData.group : UNGROUPED;\n    }\n  }\n\n  /**\n   * Handle updated items\n   * @param {number[]} ids\n   * @protected\n   */\n  _onUpdate(ids) {\n    const me = this;\n\n    ids.forEach((id) => {\n      const itemData = me.itemsData.get(id);\n      let item = me.items[id];\n      const type = itemData ? me._getType(itemData) : null;\n\n      const constructor = ItemSet.types[type];\n      let selected;\n\n      if (item) {\n        // update item\n        if (!constructor || !(item instanceof constructor)) {\n          // item type has changed, delete the item and recreate it\n          selected = item.selected; // preserve selection of this item\n          me._removeItem(item);\n          item = null;\n        } else {\n          me._updateItem(item, itemData);\n        }\n      }\n\n      if (!item && itemData) {\n        // create item\n        if (constructor) {\n          item = new constructor(itemData, me.conversion, me.options);\n          item.id = id; // TODO: not so nice setting id afterwards\n\n          me._addItem(item);\n          if (selected) {\n            this.selection.push(id);\n            item.select();\n          }\n        } else {\n          throw new TypeError(`Unknown item type \"${type}\"`);\n        }\n      }\n    });\n\n    this._order();\n\n    if (this.options.cluster) {\n      this.clusterGenerator.setItems(this.items, {\n        applyOnChangedLevel: false,\n      });\n      this._clusterItems();\n    }\n\n    this.body.emitter.emit(\"_change\", { queue: true });\n  }\n\n  /**\n   * Handle removed items\n   * @param {number[]} ids\n   * @protected\n   */\n  _onRemove(ids) {\n    let count = 0;\n    const me = this;\n    ids.forEach((id) => {\n      const item = me.items[id];\n      if (item) {\n        count++;\n        me._removeItem(item);\n      }\n    });\n\n    if (count) {\n      // update order\n      this._order();\n      this.body.emitter.emit(\"_change\", { queue: true });\n    }\n  }\n\n  /**\n   * Update the order of item in all groups\n   * @private\n   */\n  _order() {\n    // reorder the items in all groups\n    // TODO: optimization: only reorder groups affected by the changed items\n    util.forEach(this.groups, (group) => {\n      group.order();\n    });\n  }\n\n  /**\n   * Handle updated groups\n   * @param {number[]} ids\n   * @private\n   */\n  _onUpdateGroups(ids) {\n    this._onAddGroups(ids);\n  }\n\n  /**\n   * Handle changed groups (added or updated)\n   * @param {number[]} ids\n   * @private\n   */\n  _onAddGroups(ids) {\n    const me = this;\n\n    ids.forEach((id) => {\n      const groupData = me.groupsData.get(id);\n      let group = me.groups[id];\n\n      if (!group) {\n        // check for reserved ids\n        if (id == UNGROUPED || id == BACKGROUND) {\n          throw new Error(`Illegal group id. ${id} is a reserved id.`);\n        }\n\n        const groupOptions = Object.create(me.options);\n        util.extend(groupOptions, {\n          height: null,\n        });\n\n        group = new Group(id, groupData, me);\n        me.groups[id] = group;\n\n        // add items with this groupId to the new group\n        for (const itemId in me.items) {\n          if (!Object.prototype.hasOwnProperty.call(me.items, itemId)) continue;\n\n          const item = me.items[itemId];\n          if (item.data.group == id) group.add(item);\n        }\n\n        group.order();\n        group.show();\n      } else {\n        // update group\n        group.setData(groupData);\n      }\n    });\n\n    this.body.emitter.emit(\"_change\", { queue: true });\n  }\n\n  /**\n   * Handle removed groups\n   * @param {number[]} ids\n   * @private\n   */\n  _onRemoveGroups(ids) {\n    ids.forEach((id) => {\n      const group = this.groups[id];\n\n      if (group) {\n        group.dispose();\n        delete this.groups[id];\n      }\n    });\n\n    if (this.options.cluster) {\n      this.clusterGenerator.updateData();\n      this._clusterItems();\n    }\n\n    this.markDirty({ restackGroups: !!this.options.cluster });\n    this.body.emitter.emit(\"_change\", { queue: true });\n  }\n\n  /**\n   * Reorder the groups if needed\n   * @return {boolean} changed\n   * @private\n   */\n  _orderGroups() {\n    if (this.groupsData) {\n      // reorder the groups\n      let groupIds = this.groupsData.getIds({\n        order: this.options.groupOrder,\n      });\n\n      groupIds = this._orderNestedGroups(groupIds);\n\n      const changed = !util.equalArray(groupIds, this.groupIds);\n      if (changed) {\n        // hide all groups, removes them from the DOM\n        const groups = this.groups;\n        groupIds.forEach((groupId) => {\n          groups[groupId].hide();\n        });\n\n        // show the groups again, attach them to the DOM in correct order\n        groupIds.forEach((groupId) => {\n          groups[groupId].show();\n        });\n\n        this.groupIds = groupIds;\n      }\n\n      return changed;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Reorder the nested groups\n   *\n   * @param {Array.<number>} groupIds\n   * @returns {Array.<number>}\n   * @private\n   */\n  _orderNestedGroups(groupIds) {\n    /**\n     * Recursively order nested groups\n     *\n     * @param {ItemSet} t\n     * @param {Array.<number>} groupIds\n     * @returns {Array.<number>}\n     * @private\n     */\n    function getOrderedNestedGroups(t, groupIds) {\n      let result = [];\n      groupIds.forEach((groupId) => {\n        result.push(groupId);\n        const groupData = t.groupsData.get(groupId);\n        if (groupData.nestedGroups) {\n          const nestedGroupIds = t.groupsData\n            .get({\n              filter(nestedGroup) {\n                return nestedGroup.nestedInGroup == groupId;\n              },\n              order: t.options.groupOrder,\n            })\n            .map((nestedGroup) => nestedGroup.id);\n          result = result.concat(getOrderedNestedGroups(t, nestedGroupIds));\n        }\n      });\n\n      return result;\n    }\n\n    const topGroupIds = groupIds.filter(\n      (groupId) => !this.groupsData.get(groupId).nestedInGroup,\n    );\n\n    return getOrderedNestedGroups(this, topGroupIds);\n  }\n\n  /**\n   * Add a new item\n   * @param {Item} item\n   * @private\n   */\n  _addItem(item) {\n    this.items[item.id] = item;\n\n    // add to group\n    const groupId = this.getGroupId(item.data);\n    const group = this.groups[groupId];\n\n    if (!group) {\n      item.groupShowing = false;\n    } else if (group && group.data && group.data.showNested) {\n      item.groupShowing = true;\n    }\n\n    if (group) group.add(item);\n  }\n\n  /**\n   * Update an existing item\n   * @param {Item} item\n   * @param {Object} itemData\n   * @private\n   */\n  _updateItem(item, itemData) {\n    // update the items data (will redraw the item when displayed)\n    item.setData(itemData);\n\n    const groupId = this.getGroupId(item.data);\n    const group = this.groups[groupId];\n    if (!group) {\n      item.groupShowing = false;\n    } else if (group && group.data && group.data.showNested) {\n      item.groupShowing = true;\n    }\n  }\n\n  /**\n   * Delete an item from the ItemSet: remove it from the DOM, from the map\n   * with items, and from the map with visible items, and from the selection\n   * @param {Item} item\n   * @private\n   */\n  _removeItem(item) {\n    // remove from DOM\n    item.hide();\n\n    // remove from items\n    delete this.items[item.id];\n\n    // remove from selection\n    const index = this.selection.indexOf(item.id);\n    if (index != -1) this.selection.splice(index, 1);\n\n    // remove from group\n    item.parent && item.parent.remove(item);\n\n    // remove Tooltip from DOM\n    if (this.popup != null) {\n      this.popup.hide();\n    }\n  }\n\n  /**\n   * Create an array containing all items being a range (having an end date)\n   * @param {Array.<Object>} array\n   * @returns {Array}\n   * @private\n   */\n  _constructByEndArray(array) {\n    const endArray = [];\n\n    for (let i = 0; i < array.length; i++) {\n      if (array[i] instanceof RangeItem) {\n        endArray.push(array[i]);\n      }\n    }\n    return endArray;\n  }\n\n  /**\n   * Register the clicked item on touch, before dragStart is initiated.\n   *\n   * dragStart is initiated from a mousemove event, AFTER the mouse/touch is\n   * already moving. Therefore, the mouse/touch can sometimes be above an other\n   * DOM element than the item itself.\n   *\n   * @param {Event} event\n   * @private\n   */\n  _onTouch(event) {\n    // store the touched item, used in _onDragStart\n    this.touchParams.item = this.itemFromTarget(event);\n    this.touchParams.dragLeftItem = event.target.dragLeftItem || false;\n    this.touchParams.dragRightItem = event.target.dragRightItem || false;\n    this.touchParams.itemProps = null;\n  }\n\n  /**\n   * Given an group id, returns the index it has.\n   *\n   * @param {number} groupId\n   * @returns {number} index / groupId\n   * @private\n   */\n  _getGroupIndex(groupId) {\n    for (let i = 0; i < this.groupIds.length; i++) {\n      if (groupId == this.groupIds[i]) return i;\n    }\n  }\n\n  /**\n   * Start dragging the selected events\n   * @param {Event} event\n   * @private\n   */\n  _onDragStart(event) {\n    if (this.touchParams.itemIsDragging) {\n      return;\n    }\n    const item = this.touchParams.item || null;\n    const me = this;\n    let props;\n\n    if (item && (item.selected || this.options.itemsAlwaysDraggable.item)) {\n      if (\n        this.options.editable.overrideItems &&\n        !this.options.editable.updateTime &&\n        !this.options.editable.updateGroup\n      ) {\n        return;\n      }\n\n      // override options.editable\n      if (\n        item.editable != null &&\n        !item.editable.updateTime &&\n        !item.editable.updateGroup &&\n        !this.options.editable.overrideItems\n      ) {\n        return;\n      }\n\n      const dragLeftItem = this.touchParams.dragLeftItem;\n      const dragRightItem = this.touchParams.dragRightItem;\n      this.touchParams.itemIsDragging = true;\n      this.touchParams.selectedItem = item;\n\n      if (dragLeftItem) {\n        props = {\n          item: dragLeftItem,\n          initialX: event.center.x,\n          dragLeft: true,\n          data: this._cloneItemData(item.data),\n        };\n\n        this.touchParams.itemProps = [props];\n      } else if (dragRightItem) {\n        props = {\n          item: dragRightItem,\n          initialX: event.center.x,\n          dragRight: true,\n          data: this._cloneItemData(item.data),\n        };\n\n        this.touchParams.itemProps = [props];\n      } else if (\n        this.options.editable.add &&\n        (event.srcEvent.ctrlKey || event.srcEvent.metaKey)\n      ) {\n        // create a new range item when dragging with ctrl key down\n        this._onDragStartAddItem(event);\n      } else {\n        if (this.groupIds.length < 1) {\n          // Mitigates a race condition if _onDragStart() is\n          // called after markDirty() without redraw() being called between.\n          this.redraw();\n        }\n\n        const baseGroupIndex = this._getGroupIndex(item.data.group);\n\n        const itemsToDrag =\n          this.options.itemsAlwaysDraggable.item && !item.selected\n            ? [item.id]\n            : this.getSelection();\n\n        this.touchParams.itemProps = itemsToDrag.map((id) => {\n          const item = me.items[id];\n          const groupIndex = me._getGroupIndex(item.data.group);\n          return {\n            item,\n            initialX: event.center.x,\n            groupOffset: baseGroupIndex - groupIndex,\n            data: this._cloneItemData(item.data),\n          };\n        });\n      }\n\n      event.stopPropagation();\n    } else if (\n      this.options.editable.add &&\n      (event.srcEvent.ctrlKey || event.srcEvent.metaKey)\n    ) {\n      // create a new range item when dragging with ctrl key down\n      this._onDragStartAddItem(event);\n    }\n  }\n\n  /**\n   * Start creating a new range item by dragging.\n   * @param {Event} event\n   * @private\n   */\n  _onDragStartAddItem(event) {\n    const snap = this.options.snap || null;\n    const frameRect = this.dom.frame.getBoundingClientRect();\n\n    // plus (if rtl) 10 to compensate for the drag starting as soon as you've moved 10px\n    const x = this.options.rtl\n      ? frameRect.right - event.center.x + 10\n      : event.center.x - frameRect.left - 10;\n\n    const time = this.body.util.toTime(x);\n    const scale = this.body.util.getScale();\n    const step = this.body.util.getStep();\n    const start = snap ? snap(time, scale, step) : time;\n    const end = start;\n\n    const itemData = {\n      type: \"range\",\n      start,\n      end,\n      content: \"new item\",\n    };\n\n    const id = randomUUID();\n    itemData[this.itemsData.idProp] = id;\n\n    const group = this.groupFromTarget(event);\n    if (group) {\n      itemData.group = group.groupId;\n    }\n    const newItem = new RangeItem(itemData, this.conversion, this.options);\n    newItem.id = id; // TODO: not so nice setting id afterwards\n    newItem.data = this._cloneItemData(itemData);\n    this._addItem(newItem);\n    this.touchParams.selectedItem = newItem;\n\n    const props = {\n      item: newItem,\n      initialX: event.center.x,\n      data: newItem.data,\n    };\n\n    if (this.options.rtl) {\n      props.dragLeft = true;\n    } else {\n      props.dragRight = true;\n    }\n    this.touchParams.itemProps = [props];\n\n    event.stopPropagation();\n  }\n\n  /**\n   * Drag selected items\n   * @param {Event} event\n   * @private\n   */\n  _onDrag(event) {\n    if (this.popup != null && this.options.showTooltips && !this.popup.hidden) {\n      // this.popup.hide();\n      const container = this.body.dom.centerContainer;\n      const containerRect = container.getBoundingClientRect();\n      this.popup.setPosition(\n        event.center.x - containerRect.left + container.offsetLeft,\n        event.center.y - containerRect.top + container.offsetTop,\n      );\n      this.popup.show(); // redraw\n    }\n\n    if (this.touchParams.itemProps) {\n      event.stopPropagation();\n\n      const me = this;\n      const snap = this.options.snap || null;\n      const domRootOffsetLeft = this.body.dom.root.offsetLeft;\n      const xOffset = this.options.rtl\n        ? domRootOffsetLeft + this.body.domProps.right.width\n        : domRootOffsetLeft + this.body.domProps.left.width;\n      const scale = this.body.util.getScale();\n      const step = this.body.util.getStep();\n\n      //only calculate the new group for the item that's actually dragged\n      const selectedItem = this.touchParams.selectedItem;\n      const updateGroupAllowed =\n        ((this.options.editable.overrideItems ||\n          selectedItem.editable == null) &&\n          this.options.editable.updateGroup) ||\n        (!this.options.editable.overrideItems &&\n          selectedItem.editable != null &&\n          selectedItem.editable.updateGroup);\n      let newGroupBase = null;\n      if (updateGroupAllowed && selectedItem) {\n        if (selectedItem.data.group != undefined) {\n          // drag from one group to another\n          const group = me.groupFromTarget(event);\n          if (group) {\n            //we know the offset for all items, so the new group for all items\n            //will be relative to this one.\n            newGroupBase = this._getGroupIndex(group.groupId);\n          }\n        }\n      }\n\n      // move\n      this.touchParams.itemProps.forEach((props) => {\n        const current = me.body.util.toTime(event.center.x - xOffset);\n        const initial = me.body.util.toTime(props.initialX - xOffset);\n        let offset;\n        let initialStart;\n        let initialEnd;\n        let start;\n        let end;\n\n        if (this.options.rtl) {\n          offset = -(current - initial); // ms\n        } else {\n          offset = current - initial; // ms\n        }\n\n        let itemData = this._cloneItemData(props.item.data); // clone the data\n        if (\n          props.item.editable != null &&\n          !props.item.editable.updateTime &&\n          !props.item.editable.updateGroup &&\n          !me.options.editable.overrideItems\n        ) {\n          return;\n        }\n\n        const updateTimeAllowed =\n          ((this.options.editable.overrideItems ||\n            selectedItem.editable == null) &&\n            this.options.editable.updateTime) ||\n          (!this.options.editable.overrideItems &&\n            selectedItem.editable != null &&\n            selectedItem.editable.updateTime);\n        if (updateTimeAllowed) {\n          if (props.dragLeft) {\n            // drag left side of a range item\n            if (this.options.rtl) {\n              if (itemData.end != undefined) {\n                initialEnd = util.convert(props.data.end, \"Date\");\n                end = new Date(initialEnd.valueOf() + offset);\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.end = snap ? snap(end, scale, step) : end;\n              }\n            } else {\n              if (itemData.start != undefined) {\n                initialStart = util.convert(props.data.start, \"Date\");\n                start = new Date(initialStart.valueOf() + offset);\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.start = snap ? snap(start, scale, step) : start;\n              }\n            }\n          } else if (props.dragRight) {\n            // drag right side of a range item\n            if (this.options.rtl) {\n              if (itemData.start != undefined) {\n                initialStart = util.convert(props.data.start, \"Date\");\n                start = new Date(initialStart.valueOf() + offset);\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.start = snap ? snap(start, scale, step) : start;\n              }\n            } else {\n              if (itemData.end != undefined) {\n                initialEnd = util.convert(props.data.end, \"Date\");\n                end = new Date(initialEnd.valueOf() + offset);\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.end = snap ? snap(end, scale, step) : end;\n              }\n            }\n          } else {\n            // drag both start and end\n            if (itemData.start != undefined) {\n              initialStart = util.convert(props.data.start, \"Date\").valueOf();\n              start = new Date(initialStart + offset);\n\n              if (itemData.end != undefined) {\n                initialEnd = util.convert(props.data.end, \"Date\");\n                const duration = initialEnd.valueOf() - initialStart.valueOf();\n\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.start = snap ? snap(start, scale, step) : start;\n                itemData.end = new Date(itemData.start.valueOf() + duration);\n              } else {\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.start = snap ? snap(start, scale, step) : start;\n              }\n            }\n          }\n        }\n\n        if (\n          updateGroupAllowed &&\n          !props.dragLeft &&\n          !props.dragRight &&\n          newGroupBase != null\n        ) {\n          if (itemData.group != undefined) {\n            let newOffset = newGroupBase - props.groupOffset;\n\n            //make sure we stay in bounds\n            newOffset = Math.max(0, newOffset);\n            newOffset = Math.min(me.groupIds.length - 1, newOffset);\n            itemData.group = me.groupIds[newOffset];\n          }\n        }\n\n        // confirm moving the item\n        itemData = this._cloneItemData(itemData); // convert start and end to the correct type\n        me.options.onMoving(itemData, (itemData) => {\n          if (itemData) {\n            props.item.setData(this._cloneItemData(itemData, \"Date\"));\n          }\n        });\n      });\n\n      this.body.emitter.emit(\"_change\");\n    }\n  }\n\n  /**\n   * Move an item to another group\n   * @param {Item} item\n   * @param {string | number} groupId\n   * @private\n   */\n  _moveToGroup(item, groupId) {\n    const group = this.groups[groupId];\n    if (group && group.groupId != item.data.group) {\n      const oldGroup = item.parent;\n      oldGroup.remove(item);\n      oldGroup.order();\n\n      item.data.group = group.groupId;\n\n      group.add(item);\n      group.order();\n    }\n  }\n\n  /**\n   * End of dragging selected items\n   * @param {Event} event\n   * @private\n   */\n  _onDragEnd(event) {\n    this.touchParams.itemIsDragging = false;\n    if (this.touchParams.itemProps) {\n      event.stopPropagation();\n\n      const me = this;\n      const itemProps = this.touchParams.itemProps;\n      this.touchParams.itemProps = null;\n\n      itemProps.forEach((props) => {\n        const id = props.item.id;\n        const exists = me.itemsData.get(id) != null;\n\n        if (!exists) {\n          // add a new item\n          me.options.onAdd(props.item.data, (itemData) => {\n            me._removeItem(props.item); // remove temporary item\n            if (itemData) {\n              me.itemsData.add(itemData);\n            }\n\n            // force re-stacking of all items next redraw\n            me.body.emitter.emit(\"_change\");\n          });\n        } else {\n          // update existing item\n          const itemData = this._cloneItemData(props.item.data); // convert start and end to the correct type\n          me.options.onMove(itemData, (itemData) => {\n            if (itemData) {\n              // apply changes\n              itemData[this.itemsData.idProp] = id; // ensure the item contains its id (can be undefined)\n              this.itemsData.update(itemData);\n            } else {\n              // restore original values\n              props.item.setData(props.data);\n\n              me.body.emitter.emit(\"_change\");\n            }\n          });\n        }\n      });\n    }\n  }\n\n  /**\n   * On group click\n   * @param {Event} event\n   * @private\n   */\n  _onGroupClick(event) {\n    const group = this.groupFromTarget(event);\n    setTimeout(() => {\n      this.toggleGroupShowNested(group);\n    }, 1);\n  }\n\n  /**\n   * Toggle show nested\n   * @param {object} group\n   * @param {boolean} force\n   */\n  toggleGroupShowNested(group, force = undefined) {\n    if (!group || !group.nestedGroups) return;\n\n    const groupsData = this.groupsData.getDataSet();\n\n    if (force != undefined) {\n      group.showNested = !!force;\n    } else {\n      group.showNested = !group.showNested;\n    }\n\n    let nestingGroup = groupsData.get(group.groupId);\n    nestingGroup.showNested = group.showNested;\n\n    let fullNestedGroups = group.nestedGroups;\n    let nextLevel = fullNestedGroups;\n    while (nextLevel.length > 0) {\n      let current = nextLevel;\n      nextLevel = [];\n      for (let i = 0; i < current.length; i++) {\n        let node = groupsData.get(current[i]);\n        if (node.nestedGroups) {\n          nextLevel = nextLevel.concat(node.nestedGroups);\n        }\n      }\n      if (nextLevel.length > 0) {\n        fullNestedGroups = fullNestedGroups.concat(nextLevel);\n      }\n    }\n    var nestedGroups;\n    if (nestingGroup.showNested) {\n      var showNestedGroups = groupsData.get(nestingGroup.nestedGroups);\n      for (let i = 0; i < showNestedGroups.length; i++) {\n        let group = showNestedGroups[i];\n        if (\n          group.nestedGroups &&\n          group.nestedGroups.length > 0 &&\n          (group.showNested == undefined || group.showNested == true)\n        ) {\n          showNestedGroups.push(...groupsData.get(group.nestedGroups));\n        }\n      }\n      nestedGroups = showNestedGroups.map(function (nestedGroup) {\n        if (nestedGroup.visible == undefined) {\n          nestedGroup.visible = true;\n        }\n        nestedGroup.visible = !!nestingGroup.showNested;\n\n        return nestedGroup;\n      });\n    } else {\n      nestedGroups = groupsData\n        .get(fullNestedGroups)\n        .map(function (nestedGroup) {\n          if (nestedGroup.visible == undefined) {\n            nestedGroup.visible = true;\n          }\n          nestedGroup.visible = !!nestingGroup.showNested;\n          return nestedGroup;\n        });\n    }\n\n    groupsData.update(nestedGroups.concat(nestingGroup));\n\n    if (nestingGroup.showNested) {\n      util.removeClassName(group.dom.label, \"collapsed\");\n      util.addClassName(group.dom.label, \"expanded\");\n    } else {\n      util.removeClassName(group.dom.label, \"expanded\");\n      util.addClassName(group.dom.label, \"collapsed\");\n    }\n  }\n\n  /**\n   * Toggle group drag classname\n   * @param {object} group\n   */\n  toggleGroupDragClassName(group) {\n    group.dom.label.classList.toggle(\"vis-group-is-dragging\");\n    group.dom.foreground.classList.toggle(\"vis-group-is-dragging\");\n  }\n\n  /**\n   * on drag start\n   * @param {Event} event\n   * @return {void}\n   * @private\n   */\n  _onGroupDragStart(event) {\n    if (this.groupTouchParams.isDragging) return;\n\n    if (this.options.groupEditable.order) {\n      this.groupTouchParams.group = this.groupFromTarget(event);\n\n      if (this.groupTouchParams.group) {\n        event.stopPropagation();\n\n        this.groupTouchParams.isDragging = true;\n        this.toggleGroupDragClassName(this.groupTouchParams.group);\n\n        this.groupTouchParams.originalOrder = this.groupsData.getIds({\n          order: this.options.groupOrder,\n        });\n      }\n    }\n  }\n\n  /**\n   * on drag\n   * @param {Event} event\n   * @return {void}\n   * @private\n   */\n  _onGroupDrag(event) {\n    if (this.options.groupEditable.order && this.groupTouchParams.group) {\n      event.stopPropagation();\n\n      const groupsData = this.groupsData.getDataSet();\n      // drag from one group to another\n      const group = this.groupFromTarget(event);\n\n      // try to avoid toggling when groups differ in height\n      if (group && group.height != this.groupTouchParams.group.height) {\n        const movingUp = group.top < this.groupTouchParams.group.top;\n        const clientY = event.center ? event.center.y : event.clientY;\n        const targetGroup = group.dom.foreground.getBoundingClientRect();\n        const draggedGroupHeight = this.groupTouchParams.group.height;\n        if (movingUp) {\n          // skip swapping the groups when the dragged group is not below clientY afterwards\n          if (targetGroup.top + draggedGroupHeight < clientY) {\n            return;\n          }\n        } else {\n          const targetGroupHeight = group.height;\n          // skip swapping the groups when the dragged group is not below clientY afterwards\n          if (\n            targetGroup.top + targetGroupHeight - draggedGroupHeight >\n            clientY\n          ) {\n            return;\n          }\n        }\n      }\n\n      if (group && group != this.groupTouchParams.group) {\n        const targetGroup = groupsData.get(group.groupId);\n        const draggedGroup = groupsData.get(\n          this.groupTouchParams.group.groupId,\n        );\n\n        // switch groups\n        if (draggedGroup && targetGroup) {\n          this.options.groupOrderSwap(draggedGroup, targetGroup, groupsData);\n          groupsData.update(draggedGroup);\n          groupsData.update(targetGroup);\n        }\n\n        // fetch current order of groups\n        const newOrder = groupsData.getIds({\n          order: this.options.groupOrder,\n        });\n\n        // in case of changes since _onGroupDragStart\n        if (!util.equalArray(newOrder, this.groupTouchParams.originalOrder)) {\n          const origOrder = this.groupTouchParams.originalOrder;\n          const draggedId = this.groupTouchParams.group.groupId;\n          const numGroups = Math.min(origOrder.length, newOrder.length);\n          let curPos = 0;\n          let newOffset = 0;\n          let orgOffset = 0;\n          while (curPos < numGroups) {\n            // as long as the groups are where they should be step down along the groups order\n            while (\n              curPos + newOffset < numGroups &&\n              curPos + orgOffset < numGroups &&\n              newOrder[curPos + newOffset] == origOrder[curPos + orgOffset]\n            ) {\n              curPos++;\n            }\n\n            // all ok\n            if (curPos + newOffset >= numGroups) {\n              break;\n            }\n\n            // not all ok\n            // if dragged group was move upwards everything below should have an offset\n            if (newOrder[curPos + newOffset] == draggedId) {\n              newOffset = 1;\n            }\n            // if dragged group was move downwards everything above should have an offset\n            else if (origOrder[curPos + orgOffset] == draggedId) {\n              orgOffset = 1;\n            }\n            // found a group (apart from dragged group) that has the wrong position -> switch with the\n            // group at the position where other one should be, fix index arrays and continue\n            else {\n              const slippedPosition = newOrder.indexOf(\n                origOrder[curPos + orgOffset],\n              );\n              const switchGroup = groupsData.get(newOrder[curPos + newOffset]);\n              const shouldBeGroup = groupsData.get(\n                origOrder[curPos + orgOffset],\n              );\n              this.options.groupOrderSwap(\n                switchGroup,\n                shouldBeGroup,\n                groupsData,\n              );\n              groupsData.update(switchGroup);\n              groupsData.update(shouldBeGroup);\n\n              const switchGroupId = newOrder[curPos + newOffset];\n              newOrder[curPos + newOffset] = origOrder[curPos + orgOffset];\n              newOrder[slippedPosition] = switchGroupId;\n\n              curPos++;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * on drag end\n   * @param {Event} event\n   * @return {void}\n   * @private\n   */\n  _onGroupDragEnd(event) {\n    this.groupTouchParams.isDragging = false;\n\n    if (this.options.groupEditable.order && this.groupTouchParams.group) {\n      event.stopPropagation();\n\n      // update existing group\n      const me = this;\n      const id = me.groupTouchParams.group.groupId;\n      const dataset = me.groupsData.getDataSet();\n      const groupData = util.extend({}, dataset.get(id)); // clone the data\n      me.options.onMoveGroup(groupData, (groupData) => {\n        if (groupData) {\n          // apply changes\n          groupData[dataset._idProp] = id; // ensure the group contains its id (can be undefined)\n          dataset.update(groupData);\n        } else {\n          // fetch current order of groups\n          const newOrder = dataset.getIds({\n            order: me.options.groupOrder,\n          });\n\n          // restore original order\n          if (!util.equalArray(newOrder, me.groupTouchParams.originalOrder)) {\n            const origOrder = me.groupTouchParams.originalOrder;\n            const numGroups = Math.min(origOrder.length, newOrder.length);\n            let curPos = 0;\n            while (curPos < numGroups) {\n              // as long as the groups are where they should be step down along the groups order\n              while (\n                curPos < numGroups &&\n                newOrder[curPos] == origOrder[curPos]\n              ) {\n                curPos++;\n              }\n\n              // all ok\n              if (curPos >= numGroups) {\n                break;\n              }\n\n              // found a group that has the wrong position -> switch with the\n              // group at the position where other one should be, fix index arrays and continue\n              const slippedPosition = newOrder.indexOf(origOrder[curPos]);\n              const switchGroup = dataset.get(newOrder[curPos]);\n              const shouldBeGroup = dataset.get(origOrder[curPos]);\n              me.options.groupOrderSwap(switchGroup, shouldBeGroup, dataset);\n              dataset.update(switchGroup);\n              dataset.update(shouldBeGroup);\n\n              const switchGroupId = newOrder[curPos];\n              newOrder[curPos] = origOrder[curPos];\n              newOrder[slippedPosition] = switchGroupId;\n\n              curPos++;\n            }\n          }\n        }\n      });\n\n      me.body.emitter.emit(\"groupDragged\", { groupId: id });\n      this.toggleGroupDragClassName(this.groupTouchParams.group);\n      this.groupTouchParams.group = null;\n    }\n  }\n\n  /**\n   * Handle selecting/deselecting an item when tapping it\n   * @param {Event} event\n   * @private\n   */\n  _onSelectItem(event) {\n    if (!this.options.selectable) return;\n\n    const ctrlKey =\n      event.srcEvent && (event.srcEvent.ctrlKey || event.srcEvent.metaKey);\n    const shiftKey = event.srcEvent && event.srcEvent.shiftKey;\n    if (ctrlKey || shiftKey) {\n      this._onMultiSelectItem(event);\n      return;\n    }\n\n    const oldSelection = this.getSelection();\n\n    const item = this.itemFromTarget(event);\n    const selection = item && item.selectable ? [item.id] : [];\n    this.setSelection(selection);\n\n    const newSelection = this.getSelection();\n\n    // emit a select event,\n    // except when old selection is empty and new selection is still empty\n    if (newSelection.length > 0 || oldSelection.length > 0) {\n      this.body.emitter.emit(\"select\", {\n        items: newSelection,\n        event,\n      });\n    }\n  }\n\n  /**\n   * Handle hovering an item\n   * @param {Event} event\n   * @private\n   */\n  _onMouseOver(event) {\n    const item = this.itemFromTarget(event);\n    if (!item) return;\n\n    // Item we just left\n    const related = this.itemFromRelatedTarget(event);\n    if (item === related) {\n      // We haven't changed item, just element in the item\n      return;\n    }\n\n    const title = item.getTitle();\n    if (this.options.showTooltips && title) {\n      if (this.popup == null) {\n        this.popup = new Popup(\n          this.body.dom.root,\n          this.options.tooltip.overflowMethod || \"flip\",\n        );\n      }\n\n      this.popup.setText(title);\n      const container = this.body.dom.centerContainer;\n      const containerRect = container.getBoundingClientRect();\n      this.popup.setPosition(\n        event.clientX - containerRect.left + container.offsetLeft,\n        event.clientY - containerRect.top + container.offsetTop,\n      );\n      this.setPopupTimer(this.popup);\n    } else {\n      // Hovering over item without a title, hide popup\n      // Needed instead of _just_ in _onMouseOut due to #2572\n      this.clearPopupTimer();\n      if (this.popup != null) {\n        this.popup.hide();\n      }\n    }\n\n    this.body.emitter.emit(\"itemover\", {\n      item: item.id,\n      event,\n    });\n  }\n\n  /**\n   * on mouse start\n   * @param {Event} event\n   * @return {void}\n   * @private\n   */\n  _onMouseOut(event) {\n    const item = this.itemFromTarget(event);\n    if (!item) return;\n\n    // Item we are going to\n    const related = this.itemFromRelatedTarget(event);\n    if (item === related) {\n      // We aren't changing item, just element in the item\n      return;\n    }\n\n    this.clearPopupTimer();\n    if (this.popup != null) {\n      this.popup.hide();\n    }\n\n    this.body.emitter.emit(\"itemout\", {\n      item: item.id,\n      event,\n    });\n  }\n\n  /**\n   * on mouse move\n   * @param {Event} event\n   * @return {void}\n   * @private\n   */\n  _onMouseMove(event) {\n    const item = this.itemFromTarget(event);\n    if (!item) return;\n\n    if (this.popupTimer != null) {\n      // restart timer\n      this.setPopupTimer(this.popup);\n    }\n\n    if (\n      this.options.showTooltips &&\n      this.options.tooltip.followMouse &&\n      this.popup &&\n      !this.popup.hidden\n    ) {\n      const container = this.body.dom.centerContainer;\n      const containerRect = container.getBoundingClientRect();\n      this.popup.setPosition(\n        event.clientX - containerRect.left + container.offsetLeft,\n        event.clientY - containerRect.top + container.offsetTop,\n      );\n      this.popup.show(); // Redraw\n    }\n  }\n\n  /**\n   * Handle mousewheel\n   * @param {Event}  event   The event\n   * @private\n   */\n  _onMouseWheel(event) {\n    if (this.touchParams.itemIsDragging) {\n      this._onDragEnd(event);\n    }\n  }\n\n  /**\n   * Handle updates of an item on double tap\n   * @param {timeline.Item}  item   The item\n   * @private\n   */\n  _onUpdateItem(item) {\n    if (!this.options.selectable) return;\n    if (!this.options.editable.updateTime && !this.options.editable.updateGroup)\n      return;\n\n    const me = this;\n\n    if (item) {\n      // execute async handler to update the item (or cancel it)\n      const itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset\n      this.options.onUpdate(itemData, (itemData) => {\n        if (itemData) {\n          me.itemsData.update(itemData);\n        }\n      });\n    }\n  }\n\n  /**\n   * Handle drop event of data on item\n   * Only called when `objectData.target === 'item'.\n   * @param {Event} event The event\n   * @private\n   */\n  _onDropObjectOnItem(event) {\n    const item = this.itemFromTarget(event);\n    const objectData = JSON.parse(event.dataTransfer.getData(\"text\"));\n    this.options.onDropObjectOnItem(objectData, item);\n  }\n\n  /**\n   * Handle creation of an item on double tap or drop of a drag event\n   * @param {Event} event   The event\n   * @private\n   */\n  _onAddItem(event) {\n    if (!this.options.selectable) return;\n    if (!this.options.editable.add) return;\n\n    const me = this;\n    const snap = this.options.snap || null;\n\n    // add item\n    const frameRect = this.dom.frame.getBoundingClientRect();\n    const x = this.options.rtl\n      ? frameRect.right - event.center.x\n      : event.center.x - frameRect.left;\n    const start = this.body.util.toTime(x);\n    const scale = this.body.util.getScale();\n    const step = this.body.util.getStep();\n    let end;\n\n    let newItemData;\n    if (event.type == \"drop\") {\n      newItemData = JSON.parse(event.dataTransfer.getData(\"text\"));\n      newItemData.content = newItemData.content\n        ? newItemData.content\n        : \"new item\";\n      newItemData.start = newItemData.start\n        ? newItemData.start\n        : snap\n          ? snap(start, scale, step)\n          : start;\n      newItemData.type = newItemData.type || \"box\";\n      newItemData[this.itemsData.idProp] = newItemData.id || randomUUID();\n\n      if (newItemData.type == \"range\" && !newItemData.end) {\n        end = this.body.util.toTime(x + this.props.width / 5);\n        newItemData.end = snap ? snap(end, scale, step) : end;\n      }\n    } else {\n      newItemData = {\n        start: snap ? snap(start, scale, step) : start,\n        content: \"new item\",\n      };\n      newItemData[this.itemsData.idProp] = randomUUID();\n\n      // when default type is a range, add a default end date to the new item\n      if (this.options.type === \"range\") {\n        end = this.body.util.toTime(x + this.props.width / 5);\n        newItemData.end = snap ? snap(end, scale, step) : end;\n      }\n    }\n\n    const group = this.groupFromTarget(event);\n    if (group) {\n      newItemData.group = group.groupId;\n    }\n\n    // execute async handler to customize (or cancel) adding an item\n    newItemData = this._cloneItemData(newItemData); // convert start and end to the correct type\n    this.options.onAdd(newItemData, (item) => {\n      if (item) {\n        me.itemsData.add(item);\n        if (event.type == \"drop\") {\n          me.setSelection([item.id]);\n        }\n        // TODO: need to trigger a redraw?\n      }\n    });\n  }\n\n  /**\n   * Handle selecting/deselecting multiple items when holding an item\n   * @param {Event} event\n   * @private\n   */\n  _onMultiSelectItem(event) {\n    if (!this.options.selectable) return;\n\n    const item = this.itemFromTarget(event);\n\n    if (item) {\n      // multi select items (if allowed)\n\n      let selection = this.options.multiselect\n        ? this.getSelection() // take current selection\n        : []; // deselect current selection\n\n      const shiftKey = (event.srcEvent && event.srcEvent.shiftKey) || false;\n\n      if (\n        (shiftKey || this.options.sequentialSelection) &&\n        this.options.multiselect\n      ) {\n        // select all items between the old selection and the tapped item\n        const itemGroup = this.itemsData.get(item.id).group;\n\n        // when filtering get the group of the last selected item\n        let lastSelectedGroup = undefined;\n        if (this.options.multiselectPerGroup) {\n          if (selection.length > 0) {\n            lastSelectedGroup = this.itemsData.get(selection[0]).group;\n          }\n        }\n\n        // determine the selection range\n        if (\n          !this.options.multiselectPerGroup ||\n          lastSelectedGroup == undefined ||\n          lastSelectedGroup == itemGroup\n        ) {\n          selection.push(item.id);\n        }\n        const range = ItemSet._getItemRange(this.itemsData.get(selection));\n\n        if (\n          !this.options.multiselectPerGroup ||\n          lastSelectedGroup == itemGroup\n        ) {\n          // select all items within the selection range\n          selection = [];\n          for (const id in this.items) {\n            if (!Object.prototype.hasOwnProperty.call(this.items, id)) continue;\n\n            const _item = this.items[id];\n            const start = _item.data.start;\n            const end = _item.data.end !== undefined ? _item.data.end : start;\n\n            if (\n              start >= range.min &&\n              end <= range.max &&\n              (!this.options.multiselectPerGroup ||\n                lastSelectedGroup == this.itemsData.get(_item.id).group) &&\n              !(_item instanceof BackgroundItem)\n            ) {\n              selection.push(_item.id); // do not use id but item.id, id itself is stringified\n            }\n          }\n        }\n      } else {\n        // add/remove this item from the current selection\n        const index = selection.indexOf(item.id);\n        if (index == -1) {\n          // item is not yet selected -> select it\n          selection.push(item.id);\n        } else {\n          // item is already selected -> deselect it\n          selection.splice(index, 1);\n        }\n      }\n\n      const filteredSelection = selection.filter(\n        (item) => this.getItemById(item).selectable,\n      );\n\n      this.setSelection(filteredSelection);\n\n      this.body.emitter.emit(\"select\", {\n        items: this.getSelection(),\n        event,\n      });\n    }\n  }\n\n  /**\n   * Calculate the time range of a list of items\n   * @param {Array.<Object>} itemsData\n   * @return {{min: Date, max: Date}} Returns the range of the provided items\n   * @private\n   */\n  static _getItemRange(itemsData) {\n    let max = null;\n    let min = null;\n\n    itemsData.forEach((data) => {\n      if (min == null || data.start < min) {\n        min = data.start;\n      }\n\n      if (data.end != undefined) {\n        if (max == null || data.end > max) {\n          max = data.end;\n        }\n      } else {\n        if (max == null || data.start > max) {\n          max = data.start;\n        }\n      }\n    });\n\n    return {\n      min,\n      max,\n    };\n  }\n\n  /**\n   * Find an item from an element:\n   * searches for the attribute 'vis-item' in the element's tree\n   * @param {HTMLElement} element\n   * @return {Item | null} item\n   */\n  itemFromElement(element) {\n    let cur = element;\n    while (cur) {\n      if (Object.prototype.hasOwnProperty.call(cur, \"vis-item\")) {\n        return cur[\"vis-item\"];\n      }\n      cur = cur.parentNode;\n    }\n\n    return null;\n  }\n\n  /**\n   * Find an item from an event target:\n   * searches for the attribute 'vis-item' in the event target's element tree\n   * @param {Event} event\n   * @return {Item | null} item\n   */\n  itemFromTarget(event) {\n    return this.itemFromElement(event.target);\n  }\n\n  /**\n   * Find an item from an event's related target:\n   * searches for the attribute 'vis-item' in the related target's element tree\n   * @param {Event} event\n   * @return {Item | null} item\n   */\n  itemFromRelatedTarget(event) {\n    return this.itemFromElement(event.relatedTarget);\n  }\n\n  /**\n   * Find the Group from an event target:\n   * searches for the attribute 'vis-group' in the event target's element tree\n   * @param {Event} event\n   * @return {Group | null} group\n   */\n  groupFromTarget(event) {\n    const clientY = event.center ? event.center.y : event.clientY;\n    let groupIds = this.groupIds;\n\n    if (groupIds.length <= 0 && this.groupsData) {\n      groupIds = this.groupsData.getIds({\n        order: this.options.groupOrder,\n      });\n    }\n\n    for (let i = 0; i < groupIds.length; i++) {\n      const groupId = groupIds[i];\n      const group = this.groups[groupId];\n      const foreground = group.dom.foreground;\n      const foregroundRect = foreground.getBoundingClientRect();\n      if (\n        clientY >= foregroundRect.top &&\n        clientY < foregroundRect.top + foreground.offsetHeight\n      ) {\n        return group;\n      }\n\n      if (this.options.orientation.item === \"top\") {\n        if (i === this.groupIds.length - 1 && clientY > foregroundRect.top) {\n          return group;\n        }\n      } else {\n        if (i === 0 && clientY < foregroundRect.top + foreground.offset) {\n          return group;\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Find the ItemSet from an event target:\n   * searches for the attribute 'vis-itemset' in the event target's element tree\n   * @param {Event} event\n   * @return {ItemSet | null} item\n   */\n  static itemSetFromTarget(event) {\n    let target = event.target;\n    while (target) {\n      if (Object.prototype.hasOwnProperty.call(target, \"vis-itemset\")) {\n        return target[\"vis-itemset\"];\n      }\n      target = target.parentNode;\n    }\n\n    return null;\n  }\n\n  /**\n   * Clone the data of an item, and \"normalize\" it: convert the start and end date\n   * to the type (Date, Moment, ...) configured in the DataSet. If not configured,\n   * start and end are converted to Date.\n   * @param {Object} itemData, typically `item.data`\n   * @param {string} [type]  Optional Date type. If not provided, the type from the DataSet is taken\n   * @return {Object} The cloned object\n   * @private\n   */\n  _cloneItemData(itemData, type) {\n    const clone = util.extend({}, itemData);\n\n    if (!type) {\n      // convert start and end date to the type (Date, Moment, ...) configured in the DataSet\n      type = this.itemsData.type;\n    }\n\n    if (clone.start != undefined) {\n      clone.start = util.convert(clone.start, (type && type.start) || \"Date\");\n    }\n    if (clone.end != undefined) {\n      clone.end = util.convert(clone.end, (type && type.end) || \"Date\");\n    }\n\n    return clone;\n  }\n\n  /**\n   * cluster items\n   * @return {void}\n   * @private\n   */\n  _clusterItems() {\n    if (!this.options.cluster) {\n      return;\n    }\n\n    const { scale } = this.body.range.conversion(\n      this.body.domProps.center.width,\n    );\n    const clusters = this.clusterGenerator.getClusters(\n      this.clusters,\n      scale,\n      this.options.cluster,\n    );\n\n    if (this.clusters != clusters) {\n      this._detachAllClusters();\n\n      if (clusters) {\n        for (let cluster of clusters) {\n          cluster.attach();\n        }\n        this.clusters = clusters;\n      }\n\n      this._updateClusters(clusters);\n    }\n  }\n\n  /**\n   * detach all cluster items\n   * @private\n   */\n  _detachAllClusters() {\n    if (this.options.cluster) {\n      if (this.clusters && this.clusters.length) {\n        for (let cluster of this.clusters) {\n          cluster.detach();\n        }\n      }\n    }\n  }\n\n  /**\n   * update clusters\n   * @param {array} clusters\n   * @private\n   */\n  _updateClusters(clusters) {\n    if (this.clusters && this.clusters.length) {\n      const newClustersIds = new Set(clusters.map((cluster) => cluster.id));\n      const clustersToUnselect = this.clusters.filter(\n        (cluster) => !newClustersIds.has(cluster.id),\n      );\n      let selectionChanged = false;\n      for (let cluster of clustersToUnselect) {\n        const selectedIdx = this.selection.indexOf(cluster.id);\n        if (selectedIdx !== -1) {\n          cluster.unselect();\n          this.selection.splice(selectedIdx, 1);\n          selectionChanged = true;\n        }\n      }\n\n      if (selectionChanged) {\n        const newSelection = this.getSelection();\n        this.body.emitter.emit(\"select\", {\n          items: newSelection,\n          event: event,\n        });\n      }\n    }\n\n    this.clusters = clusters || [];\n  }\n}\n\n// available item types will be registered here\nItemSet.types = {\n  background: BackgroundItem,\n  box: BoxItem,\n  range: RangeItem,\n  point: PointItem,\n};\n\n/**\n * Handle added items\n * @param {number[]} ids\n * @protected\n */\nItemSet.prototype._onAdd = ItemSet.prototype._onUpdate;\n\nexport default ItemSet;\n", "import util from \"../util.js\";\n\nlet errorFound = false;\nlet allOptions;\nlet printStyle = \"background: #FFeeee; color: #dd0000\";\n/**\n *  Used to validate options.\n */\nclass Validator {\n  /**\n   * @ignore\n   */\n  constructor() {}\n\n  /**\n   * Main function to be called\n   * @param {Object} options\n   * @param {Object} referenceOptions\n   * @param {Object} subObject\n   * @returns {boolean}\n   * @static\n   */\n  static validate(options, referenceOptions, subObject) {\n    errorFound = false;\n    allOptions = referenceOptions;\n    let usedOptions = referenceOptions;\n    if (subObject !== undefined) {\n      usedOptions = referenceOptions[subObject];\n    }\n    Validator.parse(options, usedOptions, []);\n    return errorFound;\n  }\n\n  /**\n   * Will traverse an object recursively and check every value\n   * @param {Object} options\n   * @param {Object} referenceOptions\n   * @param {array} path    | where to look for the actual option\n   * @static\n   */\n  static parse(options, referenceOptions, path) {\n    for (let option in options) {\n      if (!Object.prototype.hasOwnProperty.call(options, option)) continue;\n      Validator.check(option, options, referenceOptions, path);\n    }\n  }\n\n  /**\n   * Check every value. If the value is an object, call the parse function on that object.\n   * @param {string} option\n   * @param {Object} options\n   * @param {Object} referenceOptions\n   * @param {array} path    | where to look for the actual option\n   * @static\n   */\n  static check(option, options, referenceOptions, path) {\n    if (\n      referenceOptions[option] === undefined &&\n      referenceOptions.__any__ === undefined\n    ) {\n      Validator.getSuggestion(option, referenceOptions, path);\n      return;\n    }\n\n    let referenceOption = option;\n    let is_object = true;\n\n    if (\n      referenceOptions[option] === undefined &&\n      referenceOptions.__any__ !== undefined\n    ) {\n      // NOTE: This only triggers if the __any__ is in the top level of the options object.\n      //       THAT'S A REALLY BAD PLACE TO ALLOW IT!!!!\n      // TODO: Examine if needed, remove if possible\n\n      // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.\n      referenceOption = \"__any__\";\n\n      // if the any-subgroup is not a predefined object in the configurator,\n      // we do not look deeper into the object.\n      is_object = Validator.getType(options[option]) === \"object\";\n    } else {\n      // Since all options in the reference are objects, we can check whether\n      // they are supposed to be the object to look for the __type__ field.\n      // if this is an object, we check if the correct type has been supplied to account for shorthand options.\n    }\n\n    let refOptionObj = referenceOptions[referenceOption];\n    if (is_object && refOptionObj.__type__ !== undefined) {\n      refOptionObj = refOptionObj.__type__;\n    }\n\n    Validator.checkFields(\n      option,\n      options,\n      referenceOptions,\n      referenceOption,\n      refOptionObj,\n      path,\n    );\n  }\n\n  /**\n   *\n   * @param {string}  option           | the option property\n   * @param {Object}  options          | The supplied options object\n   * @param {Object}  referenceOptions | The reference options containing all options and their allowed formats\n   * @param {string}  referenceOption  | Usually this is the same as option, except when handling an __any__ tag.\n   * @param {string}  refOptionObj     | This is the type object from the reference options\n   * @param {Array}   path             | where in the object is the option\n   * @static\n   */\n  static checkFields(\n    option,\n    options,\n    referenceOptions,\n    referenceOption,\n    refOptionObj,\n    path,\n  ) {\n    let log = function (message) {\n      console.log(\n        \"%c\" + message + Validator.printLocation(path, option),\n        printStyle,\n      );\n    };\n\n    let optionType = Validator.getType(options[option]);\n    let refOptionType = refOptionObj[optionType];\n\n    if (refOptionType !== undefined) {\n      // if the type is correct, we check if it is supposed to be one of a few select values\n      if (\n        Validator.getType(refOptionType) === \"array\" &&\n        refOptionType.indexOf(options[option]) === -1\n      ) {\n        log(\n          'Invalid option detected in \"' +\n            option +\n            '\".' +\n            \" Allowed values are:\" +\n            Validator.print(refOptionType) +\n            ' not \"' +\n            options[option] +\n            '\". ',\n        );\n        errorFound = true;\n      } else if (optionType === \"object\" && referenceOption !== \"__any__\") {\n        path = util.copyAndExtendArray(path, option);\n        Validator.parse(\n          options[option],\n          referenceOptions[referenceOption],\n          path,\n        );\n      }\n    } else if (refOptionObj[\"any\"] === undefined) {\n      // type of the field is incorrect and the field cannot be any\n      log(\n        'Invalid type received for \"' +\n          option +\n          '\". Expected: ' +\n          Validator.print(Object.keys(refOptionObj)) +\n          \". Received [\" +\n          optionType +\n          '] \"' +\n          options[option] +\n          '\"',\n      );\n      errorFound = true;\n    }\n  }\n\n  /**\n   *\n   * @param {Object|boolean|number|string|Array.<number>|Date|Node|Moment|undefined|null} object\n   * @returns {string}\n   * @static\n   */\n  static getType(object) {\n    var type = typeof object;\n\n    if (type === \"object\") {\n      if (object === null) {\n        return \"null\";\n      }\n      if (object instanceof Boolean) {\n        return \"boolean\";\n      }\n      if (object instanceof Number) {\n        return \"number\";\n      }\n      if (object instanceof String) {\n        return \"string\";\n      }\n      if (Array.isArray(object)) {\n        return \"array\";\n      }\n      if (object instanceof Date) {\n        return \"date\";\n      }\n      if (object.nodeType !== undefined) {\n        return \"dom\";\n      }\n      if (object._isAMomentObject === true) {\n        return \"moment\";\n      }\n      return \"object\";\n    } else if (type === \"number\") {\n      return \"number\";\n    } else if (type === \"boolean\") {\n      return \"boolean\";\n    } else if (type === \"string\") {\n      return \"string\";\n    } else if (type === undefined) {\n      return \"undefined\";\n    }\n    return type;\n  }\n\n  /**\n   * @param {string} option\n   * @param {Object} options\n   * @param {Array.<string>} path\n   * @static\n   */\n  static getSuggestion(option, options, path) {\n    let localSearch = Validator.findInOptions(option, options, path, false);\n    let globalSearch = Validator.findInOptions(option, allOptions, [], true);\n\n    let localSearchThreshold = 8;\n    let globalSearchThreshold = 4;\n\n    let msg;\n    if (localSearch.indexMatch !== undefined) {\n      msg =\n        \" in \" +\n        Validator.printLocation(localSearch.path, option, \"\") +\n        'Perhaps it was incomplete? Did you mean: \"' +\n        localSearch.indexMatch +\n        '\"?\\n\\n';\n    } else if (\n      globalSearch.distance <= globalSearchThreshold &&\n      localSearch.distance > globalSearch.distance\n    ) {\n      msg =\n        \" in \" +\n        Validator.printLocation(localSearch.path, option, \"\") +\n        \"Perhaps it was misplaced? Matching option found at: \" +\n        Validator.printLocation(\n          globalSearch.path,\n          globalSearch.closestMatch,\n          \"\",\n        );\n    } else if (localSearch.distance <= localSearchThreshold) {\n      msg =\n        '. Did you mean \"' +\n        localSearch.closestMatch +\n        '\"?' +\n        Validator.printLocation(localSearch.path, option);\n    } else {\n      msg =\n        \". Did you mean one of these: \" +\n        Validator.print(Object.keys(options)) +\n        Validator.printLocation(path, option);\n    }\n\n    console.log(\n      '%cUnknown option detected: \"' + option + '\"' + msg,\n      printStyle,\n    );\n    errorFound = true;\n  }\n\n  /**\n   * traverse the options in search for a match.\n   * @param {string} option\n   * @param {Object} options\n   * @param {Array} path    | where to look for the actual option\n   * @param {boolean} [recursive=false]\n   * @returns {{closestMatch: string, path: Array, distance: number}}\n   * @static\n   */\n  static findInOptions(option, options, path, recursive = false) {\n    let min = 1e9;\n    let closestMatch = \"\";\n    let closestMatchPath = [];\n    let lowerCaseOption = option.toLowerCase();\n    let indexMatch = undefined;\n    for (let op in options) {\n      if (!Object.prototype.hasOwnProperty.call(options, op)) continue;\n\n      let distance;\n      if (options[op].__type__ !== undefined && recursive === true) {\n        let result = Validator.findInOptions(\n          option,\n          options[op],\n          util.copyAndExtendArray(path, op),\n        );\n        if (min > result.distance) {\n          closestMatch = result.closestMatch;\n          closestMatchPath = result.path;\n          min = result.distance;\n          indexMatch = result.indexMatch;\n        }\n      } else {\n        if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) {\n          indexMatch = op;\n        }\n        distance = Validator.levenshteinDistance(option, op);\n        if (min > distance) {\n          closestMatch = op;\n          closestMatchPath = util.copyArray(path);\n          min = distance;\n        }\n      }\n    }\n    return {\n      closestMatch: closestMatch,\n      path: closestMatchPath,\n      distance: min,\n      indexMatch: indexMatch,\n    };\n  }\n\n  /**\n   * @param {Array.<string>} path\n   * @param {Object} option\n   * @param {string} prefix\n   * @returns {String}\n   * @static\n   */\n  static printLocation(path, option, prefix = \"Problem value found at: \\n\") {\n    let str = \"\\n\\n\" + prefix + \"options = {\\n\";\n    for (let i = 0; i < path.length; i++) {\n      for (let j = 0; j < i + 1; j++) {\n        str += \"  \";\n      }\n      str += path[i] + \": {\\n\";\n    }\n    for (let j = 0; j < path.length + 1; j++) {\n      str += \"  \";\n    }\n    str += option + \"\\n\";\n    for (let i = 0; i < path.length + 1; i++) {\n      for (let j = 0; j < path.length - i; j++) {\n        str += \"  \";\n      }\n      str += \"}\\n\";\n    }\n    return str + \"\\n\\n\";\n  }\n\n  /**\n   * @param {Object} options\n   * @returns {String}\n   * @static\n   */\n  static print(options) {\n    return JSON.stringify(options)\n      .replace(/(\\\")|(\\[)|(\\])|(,\"__type__\")/g, \"\")\n      .replace(/(\\,)/g, \", \");\n  }\n\n  /**\n   *  Compute the edit distance between the two given strings\n   * http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript\n   *\n   * Copyright (c) 2011 Andrei Mackenzie\n   *\n   * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n   *\n   * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n   *\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n   *\n   * @param {string} a\n   * @param {string} b\n   * @returns {Array.<Array.<number>>}}\n   * @static\n   */\n  static levenshteinDistance(a, b) {\n    if (a.length === 0) return b.length;\n    if (b.length === 0) return a.length;\n\n    var matrix = [];\n\n    // increment along the first column of each row\n    var i;\n    for (i = 0; i <= b.length; i++) {\n      matrix[i] = [i];\n    }\n\n    // increment each column in the first row\n    var j;\n    for (j = 0; j <= a.length; j++) {\n      matrix[0][j] = j;\n    }\n\n    // Fill in the rest of the matrix\n    for (i = 1; i <= b.length; i++) {\n      for (j = 1; j <= a.length; j++) {\n        if (b.charAt(i - 1) == a.charAt(j - 1)) {\n          matrix[i][j] = matrix[i - 1][j - 1];\n        } else {\n          matrix[i][j] = Math.min(\n            matrix[i - 1][j - 1] + 1, // substitution\n            Math.min(\n              matrix[i][j - 1] + 1, // insertion\n              matrix[i - 1][j] + 1,\n            ),\n          ); // deletion\n        }\n      }\n    }\n\n    return matrix[b.length][a.length];\n  }\n}\n\nexport { Validator, printStyle };\n", "/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nlet string = \"string\";\nlet bool = \"boolean\";\nlet number = \"number\";\nlet array = \"array\";\nlet date = \"date\";\nlet object = \"object\"; // should only be in a __type__ property\nlet dom = \"dom\";\nlet moment = \"moment\";\nlet any = \"any\";\n\nlet allOptions = {\n  configure: {\n    enabled: { boolean: bool },\n    filter: { boolean: bool, function: \"function\" },\n    container: { dom },\n    __type__: { object, boolean: bool, function: \"function\" },\n  },\n\n  //globals :\n  align: { string },\n  alignCurrentTime: { string, undefined: \"undefined\" },\n  rtl: { boolean: bool, undefined: \"undefined\" },\n  rollingMode: {\n    follow: { boolean: bool },\n    offset: { number, undefined: \"undefined\" },\n    __type__: { object },\n  },\n  onTimeout: {\n    timeoutMs: { number },\n    callback: { function: \"function\" },\n    __type__: { object },\n  },\n  verticalScroll: { boolean: bool, undefined: \"undefined\" },\n  horizontalScroll: { boolean: bool, undefined: \"undefined\" },\n  horizontalScrollKey: { string: string, undefined: \"undefined\" },\n  horizontalScrollInvert: { boolean: bool, undefined: \"undefined\" },\n  autoResize: { boolean: bool },\n  throttleRedraw: { number }, // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511\n  clickToUse: { boolean: bool },\n  dataAttributes: { string, array },\n  editable: {\n    add: { boolean: bool, undefined: \"undefined\" },\n    remove: { boolean: bool, undefined: \"undefined\" },\n    updateGroup: { boolean: bool, undefined: \"undefined\" },\n    updateTime: { boolean: bool, undefined: \"undefined\" },\n    overrideItems: { boolean: bool, undefined: \"undefined\" },\n    __type__: { boolean: bool, object },\n  },\n  end: { number, date, string, moment },\n  format: {\n    minorLabels: {\n      millisecond: { string, undefined: \"undefined\" },\n      second: { string, undefined: \"undefined\" },\n      minute: { string, undefined: \"undefined\" },\n      hour: { string, undefined: \"undefined\" },\n      weekday: { string, undefined: \"undefined\" },\n      day: { string, undefined: \"undefined\" },\n      week: { string, undefined: \"undefined\" },\n      month: { string, undefined: \"undefined\" },\n      year: { string, undefined: \"undefined\" },\n      __type__: { object, function: \"function\" },\n    },\n    majorLabels: {\n      millisecond: { string, undefined: \"undefined\" },\n      second: { string, undefined: \"undefined\" },\n      minute: { string, undefined: \"undefined\" },\n      hour: { string, undefined: \"undefined\" },\n      weekday: { string, undefined: \"undefined\" },\n      day: { string, undefined: \"undefined\" },\n      week: { string, undefined: \"undefined\" },\n      month: { string, undefined: \"undefined\" },\n      year: { string, undefined: \"undefined\" },\n      __type__: { object, function: \"function\" },\n    },\n    __type__: { object },\n  },\n  moment: { function: \"function\" },\n  groupHeightMode: { string },\n  groupOrder: { string, function: \"function\" },\n  groupEditable: {\n    add: { boolean: bool, undefined: \"undefined\" },\n    remove: { boolean: bool, undefined: \"undefined\" },\n    order: { boolean: bool, undefined: \"undefined\" },\n    __type__: { boolean: bool, object },\n  },\n  groupOrderSwap: { function: \"function\" },\n  height: { string, number },\n  hiddenDates: {\n    start: { date, number, string, moment },\n    end: { date, number, string, moment },\n    repeat: { string },\n    __type__: { object, array },\n  },\n  itemsAlwaysDraggable: {\n    item: { boolean: bool, undefined: \"undefined\" },\n    range: { boolean: bool, undefined: \"undefined\" },\n    __type__: { boolean: bool, object },\n  },\n  limitSize: { boolean: bool },\n  locale: { string },\n  locales: {\n    __any__: { any },\n    __type__: { object },\n  },\n  longSelectPressTime: { number },\n  margin: {\n    axis: { number },\n    item: {\n      horizontal: { number, undefined: \"undefined\" },\n      vertical: { number, undefined: \"undefined\" },\n      __type__: { object, number },\n    },\n    __type__: { object, number },\n  },\n  max: { date, number, string, moment },\n  maxHeight: { number, string },\n  maxMinorChars: { number },\n  min: { date, number, string, moment },\n  minHeight: { number, string },\n  moveable: { boolean: bool },\n  multiselect: { boolean: bool },\n  multiselectPerGroup: { boolean: bool },\n  onAdd: { function: \"function\" },\n  onDropObjectOnItem: { function: \"function\" },\n  onUpdate: { function: \"function\" },\n  onMove: { function: \"function\" },\n  onMoving: { function: \"function\" },\n  onRemove: { function: \"function\" },\n  onAddGroup: { function: \"function\" },\n  onMoveGroup: { function: \"function\" },\n  onRemoveGroup: { function: \"function\" },\n  onInitialDrawComplete: { function: \"function\" },\n  order: { function: \"function\" },\n  orientation: {\n    axis: { string, undefined: \"undefined\" },\n    item: { string, undefined: \"undefined\" },\n    __type__: { string, object },\n  },\n  selectable: { boolean: bool },\n  sequentialSelection: { boolean: bool },\n  showCurrentTime: { boolean: bool },\n  showMajorLabels: { boolean: bool },\n  showMinorLabels: { boolean: bool },\n  showWeekScale: { boolean: bool },\n  stack: { boolean: bool },\n  stackSubgroups: { boolean: bool },\n  cluster: {\n    maxItems: { number: number, undefined: \"undefined\" },\n    titleTemplate: { string: string, undefined: \"undefined\" },\n    clusterCriteria: { function: \"function\", undefined: \"undefined\" },\n    showStipes: { boolean: bool, undefined: \"undefined\" },\n    fitOnDoubleClick: { boolean: bool, undefined: \"undefined\" },\n    __type__: { boolean: bool, object },\n  },\n  snap: { function: \"function\", null: \"null\" },\n  start: { date, number, string, moment },\n  template: { function: \"function\" },\n  loadingScreenTemplate: { function: \"function\" },\n  groupTemplate: { function: \"function\" },\n  visibleFrameTemplate: { string, function: \"function\" },\n  showTooltips: { boolean: bool },\n  tooltip: {\n    followMouse: { boolean: bool },\n    overflowMethod: { string: [\"cap\", \"flip\", \"none\"] },\n    delay: { number },\n    template: { function: \"function\" },\n    __type__: { object },\n  },\n  tooltipOnItemUpdateTime: {\n    template: { function: \"function\" },\n    __type__: { boolean: bool, object },\n  },\n  timeAxis: {\n    scale: { string, undefined: \"undefined\" },\n    step: { number, undefined: \"undefined\" },\n    __type__: { object },\n  },\n  type: { string },\n  width: { string, number },\n  preferZoom: { boolean: bool },\n  zoomable: { boolean: bool },\n  zoomKey: { string: [\"ctrlKey\", \"altKey\", \"shiftKey\", \"metaKey\", \"\"] },\n  zoomFriction: { number },\n  zoomMax: { number },\n  zoomMin: { number },\n  xss: {\n    disabled: { boolean: bool },\n    filterOptions: {\n      __any__: { any },\n      __type__: { object },\n    },\n    __type__: { object },\n  },\n  __type__: { object },\n};\n\nlet configureOptions = {\n  global: {\n    align: [\"center\", \"left\", \"right\"],\n    alignCurrentTime: [\n      \"none\",\n      \"year\",\n      \"month\",\n      \"quarter\",\n      \"week\",\n      \"isoWeek\",\n      \"day\",\n      \"date\",\n      \"hour\",\n      \"minute\",\n      \"second\",\n    ],\n    direction: false,\n    autoResize: true,\n    clickToUse: false,\n    // dataAttributes: ['all'], // FIXME: can be 'all' or string[]\n    editable: {\n      add: false,\n      remove: false,\n      updateGroup: false,\n      updateTime: false,\n    },\n    end: \"\",\n    format: {\n      minorLabels: {\n        millisecond: \"SSS\",\n        second: \"s\",\n        minute: \"HH:mm\",\n        hour: \"HH:mm\",\n        weekday: \"ddd D\",\n        day: \"D\",\n        week: \"w\",\n        month: \"MMM\",\n        year: \"YYYY\",\n      },\n      majorLabels: {\n        millisecond: \"HH:mm:ss\",\n        second: \"D MMMM HH:mm\",\n        minute: \"ddd D MMMM\",\n        hour: \"ddd D MMMM\",\n        weekday: \"MMMM YYYY\",\n        day: \"MMMM YYYY\",\n        week: \"MMMM YYYY\",\n        month: \"YYYY\",\n        year: \"\",\n      },\n    },\n    groupHeightMode: [\"auto\", \"fixed\", \"fitItems\"],\n    //groupOrder: {string, 'function': 'function'},\n    groupsDraggable: false,\n    height: \"\",\n    //hiddenDates: {object, array},\n    locale: \"\",\n    longSelectPressTime: 251,\n    margin: {\n      axis: [20, 0, 100, 1],\n      item: {\n        horizontal: [10, 0, 100, 1],\n        vertical: [10, 0, 100, 1],\n      },\n    },\n    max: \"\",\n    maxHeight: \"\",\n    maxMinorChars: [7, 0, 20, 1],\n    min: \"\",\n    minHeight: \"\",\n    moveable: false,\n    multiselect: false,\n    multiselectPerGroup: false,\n    //onAdd: {'function': 'function'},\n    //onUpdate: {'function': 'function'},\n    //onMove: {'function': 'function'},\n    //onMoving: {'function': 'function'},\n    //onRename: {'function': 'function'},\n    //order: {'function': 'function'},\n    orientation: {\n      axis: [\"both\", \"bottom\", \"top\"],\n      item: [\"bottom\", \"top\"],\n    },\n    preferZoom: false,\n    selectable: true,\n    showCurrentTime: false,\n    showMajorLabels: true,\n    showMinorLabels: true,\n    stack: true,\n    stackSubgroups: true,\n    cluster: false,\n    //snap: {'function': 'function', nada},\n    start: \"\",\n    //template: {'function': 'function'},\n    //timeAxis: {\n    //  scale: ['millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'week', 'month', 'year'],\n    //  step: [1, 1, 10, 1]\n    //},\n    showTooltips: true,\n    tooltip: {\n      followMouse: false,\n      overflowMethod: \"flip\",\n      delay: [500, 0, 99999, 100],\n    },\n    tooltipOnItemUpdateTime: false,\n    type: [\"box\", \"point\", \"range\", \"background\"],\n    width: \"100%\",\n    zoomable: true,\n    zoomKey: [\"ctrlKey\", \"altKey\", \"shiftKey\", \"metaKey\", \"\"],\n    zoomMax: [315360000000000, 10, 315360000000000, 1],\n    zoomMin: [10, 10, 315360000000000, 1],\n    xss: { disabled: false },\n  },\n};\n\nexport { allOptions, configureOptions };\n", "import Hammer from \"../module/hammer.js\";\nimport * as hammerUtil from \"../hammerUtil.js\";\nimport util from \"../util.js\";\n\nvar htmlColors = {\n  black: \"#000000\",\n  navy: \"#000080\",\n  darkblue: \"#00008B\",\n  mediumblue: \"#0000CD\",\n  blue: \"#0000FF\",\n  darkgreen: \"#006400\",\n  green: \"#008000\",\n  teal: \"#008080\",\n  darkcyan: \"#008B8B\",\n  deepskyblue: \"#00BFFF\",\n  darkturquoise: \"#00CED1\",\n  mediumspringgreen: \"#00FA9A\",\n  lime: \"#00FF00\",\n  springgreen: \"#00FF7F\",\n  aqua: \"#00FFFF\",\n  cyan: \"#00FFFF\",\n  midnightblue: \"#191970\",\n  dodgerblue: \"#1E90FF\",\n  lightseagreen: \"#20B2AA\",\n  forestgreen: \"#228B22\",\n  seagreen: \"#2E8B57\",\n  darkslategray: \"#2F4F4F\",\n  limegreen: \"#32CD32\",\n  mediumseagreen: \"#3CB371\",\n  turquoise: \"#40E0D0\",\n  royalblue: \"#4169E1\",\n  steelblue: \"#4682B4\",\n  darkslateblue: \"#483D8B\",\n  mediumturquoise: \"#48D1CC\",\n  indigo: \"#4B0082\",\n  darkolivegreen: \"#556B2F\",\n  cadetblue: \"#5F9EA0\",\n  cornflowerblue: \"#6495ED\",\n  mediumaquamarine: \"#66CDAA\",\n  dimgray: \"#696969\",\n  slateblue: \"#6A5ACD\",\n  olivedrab: \"#6B8E23\",\n  slategray: \"#708090\",\n  lightslategray: \"#778899\",\n  mediumslateblue: \"#7B68EE\",\n  lawngreen: \"#7CFC00\",\n  chartreuse: \"#7FFF00\",\n  aquamarine: \"#7FFFD4\",\n  maroon: \"#800000\",\n  purple: \"#800080\",\n  olive: \"#808000\",\n  gray: \"#808080\",\n  skyblue: \"#87CEEB\",\n  lightskyblue: \"#87CEFA\",\n  blueviolet: \"#8A2BE2\",\n  darkred: \"#8B0000\",\n  darkmagenta: \"#8B008B\",\n  saddlebrown: \"#8B4513\",\n  darkseagreen: \"#8FBC8F\",\n  lightgreen: \"#90EE90\",\n  mediumpurple: \"#9370D8\",\n  darkviolet: \"#9400D3\",\n  palegreen: \"#98FB98\",\n  darkorchid: \"#9932CC\",\n  yellowgreen: \"#9ACD32\",\n  sienna: \"#A0522D\",\n  brown: \"#A52A2A\",\n  darkgray: \"#A9A9A9\",\n  lightblue: \"#ADD8E6\",\n  greenyellow: \"#ADFF2F\",\n  paleturquoise: \"#AFEEEE\",\n  lightsteelblue: \"#B0C4DE\",\n  powderblue: \"#B0E0E6\",\n  firebrick: \"#B22222\",\n  darkgoldenrod: \"#B8860B\",\n  mediumorchid: \"#BA55D3\",\n  rosybrown: \"#BC8F8F\",\n  darkkhaki: \"#BDB76B\",\n  silver: \"#C0C0C0\",\n  mediumvioletred: \"#C71585\",\n  indianred: \"#CD5C5C\",\n  peru: \"#CD853F\",\n  chocolate: \"#D2691E\",\n  tan: \"#D2B48C\",\n  lightgrey: \"#D3D3D3\",\n  palevioletred: \"#D87093\",\n  thistle: \"#D8BFD8\",\n  orchid: \"#DA70D6\",\n  goldenrod: \"#DAA520\",\n  crimson: \"#DC143C\",\n  gainsboro: \"#DCDCDC\",\n  plum: \"#DDA0DD\",\n  burlywood: \"#DEB887\",\n  lightcyan: \"#E0FFFF\",\n  lavender: \"#E6E6FA\",\n  darksalmon: \"#E9967A\",\n  violet: \"#EE82EE\",\n  palegoldenrod: \"#EEE8AA\",\n  lightcoral: \"#F08080\",\n  khaki: \"#F0E68C\",\n  aliceblue: \"#F0F8FF\",\n  honeydew: \"#F0FFF0\",\n  azure: \"#F0FFFF\",\n  sandybrown: \"#F4A460\",\n  wheat: \"#F5DEB3\",\n  beige: \"#F5F5DC\",\n  whitesmoke: \"#F5F5F5\",\n  mintcream: \"#F5FFFA\",\n  ghostwhite: \"#F8F8FF\",\n  salmon: \"#FA8072\",\n  antiquewhite: \"#FAEBD7\",\n  linen: \"#FAF0E6\",\n  lightgoldenrodyellow: \"#FAFAD2\",\n  oldlace: \"#FDF5E6\",\n  red: \"#FF0000\",\n  fuchsia: \"#FF00FF\",\n  magenta: \"#FF00FF\",\n  deeppink: \"#FF1493\",\n  orangered: \"#FF4500\",\n  tomato: \"#FF6347\",\n  hotpink: \"#FF69B4\",\n  coral: \"#FF7F50\",\n  darkorange: \"#FF8C00\",\n  lightsalmon: \"#FFA07A\",\n  orange: \"#FFA500\",\n  lightpink: \"#FFB6C1\",\n  pink: \"#FFC0CB\",\n  gold: \"#FFD700\",\n  peachpuff: \"#FFDAB9\",\n  navajowhite: \"#FFDEAD\",\n  moccasin: \"#FFE4B5\",\n  bisque: \"#FFE4C4\",\n  mistyrose: \"#FFE4E1\",\n  blanchedalmond: \"#FFEBCD\",\n  papayawhip: \"#FFEFD5\",\n  lavenderblush: \"#FFF0F5\",\n  seashell: \"#FFF5EE\",\n  cornsilk: \"#FFF8DC\",\n  lemonchiffon: \"#FFFACD\",\n  floralwhite: \"#FFFAF0\",\n  snow: \"#FFFAFA\",\n  yellow: \"#FFFF00\",\n  lightyellow: \"#FFFFE0\",\n  ivory: \"#FFFFF0\",\n  white: \"#FFFFFF\",\n};\n\n/**\n * @param {number} [pixelRatio=1]\n */\nclass ColorPicker {\n  /**\n   * @param {number} [pixelRatio=1]\n   */\n  constructor(pixelRatio = 1) {\n    this.pixelRatio = pixelRatio;\n    this.generated = false;\n    this.centerCoordinates = { x: 289 / 2, y: 289 / 2 };\n    this.r = 289 * 0.49;\n    this.color = { r: 255, g: 255, b: 255, a: 1.0 };\n    this.hueCircle = undefined;\n    this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 };\n    this.previousColor = undefined;\n    this.applied = false;\n\n    // bound by\n    this.updateCallback = () => {};\n    this.closeCallback = () => {};\n\n    // create all DOM elements\n    this._create();\n  }\n\n  /**\n   * this inserts the colorPicker into a div from the DOM\n   * @param {Element} container\n   */\n  insertTo(container) {\n    if (this.hammer !== undefined) {\n      this.hammer.destroy();\n      this.hammer = undefined;\n    }\n    this.container = container;\n    this.container.appendChild(this.frame);\n    this._bindHammer();\n\n    this._setSize();\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param {function} callback\n   */\n  setUpdateCallback(callback) {\n    if (typeof callback === \"function\") {\n      this.updateCallback = callback;\n    } else {\n      throw new Error(\n        \"Function attempted to set as colorPicker update callback is not a function.\",\n      );\n    }\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param {function} callback\n   */\n  setCloseCallback(callback) {\n    if (typeof callback === \"function\") {\n      this.closeCallback = callback;\n    } else {\n      throw new Error(\n        \"Function attempted to set as colorPicker closing callback is not a function.\",\n      );\n    }\n  }\n\n  /**\n   *\n   * @param {string} color\n   * @returns {String}\n   * @private\n   */\n  _isColorString(color) {\n    if (typeof color === \"string\") {\n      return htmlColors[color];\n    }\n  }\n\n  /**\n   * Set the color of the colorPicker\n   * Supported formats:\n   * 'red'                   --> HTML color string\n   * '#ffffff'               --> hex string\n   * 'rgb(255,255,255)'      --> rgb string\n   * 'rgba(255,255,255,1.0)' --> rgba string\n   * {r:255,g:255,b:255}     --> rgb object\n   * {r:255,g:255,b:255,a:1.0} --> rgba object\n   * @param {string|Object} color\n   * @param {boolean} [setInitial=true]\n   */\n  setColor(color, setInitial = true) {\n    if (color === \"none\") {\n      return;\n    }\n\n    let rgba;\n\n    // if a html color shorthand is used, convert to hex\n    var htmlColor = this._isColorString(color);\n    if (htmlColor !== undefined) {\n      color = htmlColor;\n    }\n\n    // check format\n    if (util.isString(color) === true) {\n      if (util.isValidRGB(color) === true) {\n        let rgbaArray = color\n          .substr(4)\n          .substr(0, color.length - 5)\n          .split(\",\");\n        rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 };\n      } else if (util.isValidRGBA(color) === true) {\n        let rgbaArray = color\n          .substr(5)\n          .substr(0, color.length - 6)\n          .split(\",\");\n        rgba = {\n          r: rgbaArray[0],\n          g: rgbaArray[1],\n          b: rgbaArray[2],\n          a: rgbaArray[3],\n        };\n      } else if (util.isValidHex(color) === true) {\n        let rgbObj = util.hexToRGB(color);\n        rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 };\n      }\n    } else {\n      if (color instanceof Object) {\n        if (\n          color.r !== undefined &&\n          color.g !== undefined &&\n          color.b !== undefined\n        ) {\n          let alpha = color.a !== undefined ? color.a : \"1.0\";\n          rgba = { r: color.r, g: color.g, b: color.b, a: alpha };\n        }\n      }\n    }\n\n    // set color\n    if (rgba === undefined) {\n      throw new Error(\n        \"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \" +\n          JSON.stringify(color),\n      );\n    } else {\n      this._setColor(rgba, setInitial);\n    }\n  }\n\n  /**\n   * this shows the color picker.\n   * The hue circle is constructed once and stored.\n   */\n  show() {\n    if (this.closeCallback !== undefined) {\n      this.closeCallback();\n      this.closeCallback = undefined;\n    }\n\n    this.applied = false;\n    this.frame.style.display = \"block\";\n    this._generateHueCircle();\n  }\n\n  // ------------------------------------------ PRIVATE ----------------------------- //\n\n  /**\n   * Hide the picker. Is called by the cancel button.\n   * Optional boolean to store the previous color for easy access later on.\n   * @param {boolean} [storePrevious=true]\n   * @private\n   */\n  _hide(storePrevious = true) {\n    // store the previous color for next time;\n    if (storePrevious === true) {\n      this.previousColor = util.extend({}, this.color);\n    }\n\n    if (this.applied === true) {\n      this.updateCallback(this.initialColor);\n    }\n\n    this.frame.style.display = \"none\";\n\n    // call the closing callback, restoring the onclick method.\n    // this is in a setTimeout because it will trigger the show again before the click is done.\n    setTimeout(() => {\n      if (this.closeCallback !== undefined) {\n        this.closeCallback();\n        this.closeCallback = undefined;\n      }\n    }, 0);\n  }\n\n  /**\n   * bound to the save button. Saves and hides.\n   * @private\n   */\n  _save() {\n    this.updateCallback(this.color);\n    this.applied = false;\n    this._hide();\n  }\n\n  /**\n   * Bound to apply button. Saves but does not close. Is undone by the cancel button.\n   * @private\n   */\n  _apply() {\n    this.applied = true;\n    this.updateCallback(this.color);\n    this._updatePicker(this.color);\n  }\n\n  /**\n   * load the color from the previous session.\n   * @private\n   */\n  _loadLast() {\n    if (this.previousColor !== undefined) {\n      this.setColor(this.previousColor, false);\n    } else {\n      alert(\"There is no last color to load...\");\n    }\n  }\n\n  /**\n   * set the color, place the picker\n   * @param {Object} rgba\n   * @param {boolean} [setInitial=true]\n   * @private\n   */\n  _setColor(rgba, setInitial = true) {\n    // store the initial color\n    if (setInitial === true) {\n      this.initialColor = util.extend({}, rgba);\n    }\n\n    this.color = rgba;\n    let hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b);\n\n    let angleConvert = 2 * Math.PI;\n    let radius = this.r * hsv.s;\n    let x = this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);\n    let y = this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);\n\n    this.colorPickerSelector.style.left =\n      x - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n    this.colorPickerSelector.style.top =\n      y - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n\n    this._updatePicker(rgba);\n  }\n\n  /**\n   * bound to opacity control\n   * @param {number} value\n   * @private\n   */\n  _setOpacity(value) {\n    this.color.a = value / 100;\n    this._updatePicker(this.color);\n  }\n\n  /**\n   * bound to brightness control\n   * @param {number} value\n   * @private\n   */\n  _setBrightness(value) {\n    let hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.v = value / 100;\n    let rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba[\"a\"] = this.color.a;\n    this.color = rgba;\n    this._updatePicker();\n  }\n\n  /**\n   * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.\n   * @param {Object} rgba\n   * @private\n   */\n  _updatePicker(rgba = this.color) {\n    let hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b);\n    let ctx = this.colorPickerCanvas.getContext(\"2d\");\n    if (this.pixelRation === undefined) {\n      this.pixelRatio =\n        (window.devicePixelRatio || 1) /\n        (ctx.webkitBackingStorePixelRatio ||\n          ctx.mozBackingStorePixelRatio ||\n          ctx.msBackingStorePixelRatio ||\n          ctx.oBackingStorePixelRatio ||\n          ctx.backingStorePixelRatio ||\n          1);\n    }\n    ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n    // clear the canvas\n    let w = this.colorPickerCanvas.clientWidth;\n    let h = this.colorPickerCanvas.clientHeight;\n    ctx.clearRect(0, 0, w, h);\n\n    ctx.putImageData(this.hueCircle, 0, 0);\n    ctx.fillStyle = \"rgba(0,0,0,\" + (1 - hsv.v) + \")\";\n    ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n    ctx.fill();\n\n    this.brightnessRange.value = 100 * hsv.v;\n    this.opacityRange.value = 100 * rgba.a;\n\n    this.initialColorDiv.style.backgroundColor =\n      \"rgba(\" +\n      this.initialColor.r +\n      \",\" +\n      this.initialColor.g +\n      \",\" +\n      this.initialColor.b +\n      \",\" +\n      this.initialColor.a +\n      \")\";\n    this.newColorDiv.style.backgroundColor =\n      \"rgba(\" +\n      this.color.r +\n      \",\" +\n      this.color.g +\n      \",\" +\n      this.color.b +\n      \",\" +\n      this.color.a +\n      \")\";\n  }\n\n  /**\n   * used by create to set the size of the canvas.\n   * @private\n   */\n  _setSize() {\n    this.colorPickerCanvas.style.width = \"100%\";\n    this.colorPickerCanvas.style.height = \"100%\";\n\n    this.colorPickerCanvas.width = 289 * this.pixelRatio;\n    this.colorPickerCanvas.height = 289 * this.pixelRatio;\n  }\n\n  /**\n   * create all dom elements\n   * TODO: cleanup, lots of similar dom elements\n   * @private\n   */\n  _create() {\n    this.frame = document.createElement(\"div\");\n    this.frame.className = \"vis-color-picker\";\n\n    this.colorPickerDiv = document.createElement(\"div\");\n    this.colorPickerSelector = document.createElement(\"div\");\n    this.colorPickerSelector.className = \"vis-selector\";\n    this.colorPickerDiv.appendChild(this.colorPickerSelector);\n\n    this.colorPickerCanvas = document.createElement(\"canvas\");\n    this.colorPickerDiv.appendChild(this.colorPickerCanvas);\n\n    if (!this.colorPickerCanvas.getContext) {\n      let noCanvas = document.createElement(\"DIV\");\n      noCanvas.style.color = \"red\";\n      noCanvas.style.fontWeight = \"bold\";\n      noCanvas.style.padding = \"10px\";\n      noCanvas.innerHTML = \"Error: your browser does not support HTML canvas\";\n      this.colorPickerCanvas.appendChild(noCanvas);\n    } else {\n      let ctx = this.colorPickerCanvas.getContext(\"2d\");\n      this.pixelRatio =\n        (window.devicePixelRatio || 1) /\n        (ctx.webkitBackingStorePixelRatio ||\n          ctx.mozBackingStorePixelRatio ||\n          ctx.msBackingStorePixelRatio ||\n          ctx.oBackingStorePixelRatio ||\n          ctx.backingStorePixelRatio ||\n          1);\n      this.colorPickerCanvas\n        .getContext(\"2d\")\n        .setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    }\n\n    this.colorPickerDiv.className = \"vis-color\";\n\n    this.opacityDiv = document.createElement(\"div\");\n    this.opacityDiv.className = \"vis-opacity\";\n\n    this.brightnessDiv = document.createElement(\"div\");\n    this.brightnessDiv.className = \"vis-brightness\";\n\n    this.arrowDiv = document.createElement(\"div\");\n    this.arrowDiv.className = \"vis-arrow\";\n\n    this.opacityRange = document.createElement(\"input\");\n    try {\n      this.opacityRange.type = \"range\"; // Not supported on IE9\n      this.opacityRange.min = \"0\";\n      this.opacityRange.max = \"100\";\n    } catch (err) {\n      // TODO: Add some error handling and remove this lint exception\n    } // eslint-disable-line no-empty\n    this.opacityRange.value = \"100\";\n    this.opacityRange.className = \"vis-range\";\n\n    this.brightnessRange = document.createElement(\"input\");\n    try {\n      this.brightnessRange.type = \"range\"; // Not supported on IE9\n      this.brightnessRange.min = \"0\";\n      this.brightnessRange.max = \"100\";\n    } catch (err) {\n      // TODO: Add some error handling and remove this lint exception\n    } // eslint-disable-line no-empty\n    this.brightnessRange.value = \"100\";\n    this.brightnessRange.className = \"vis-range\";\n\n    this.opacityDiv.appendChild(this.opacityRange);\n    this.brightnessDiv.appendChild(this.brightnessRange);\n\n    var me = this;\n    this.opacityRange.onchange = function () {\n      me._setOpacity(this.value);\n    };\n    this.opacityRange.oninput = function () {\n      me._setOpacity(this.value);\n    };\n    this.brightnessRange.onchange = function () {\n      me._setBrightness(this.value);\n    };\n    this.brightnessRange.oninput = function () {\n      me._setBrightness(this.value);\n    };\n\n    this.brightnessLabel = document.createElement(\"div\");\n    this.brightnessLabel.className = \"vis-label vis-brightness\";\n    this.brightnessLabel.innerHTML = \"brightness:\";\n\n    this.opacityLabel = document.createElement(\"div\");\n    this.opacityLabel.className = \"vis-label vis-opacity\";\n    this.opacityLabel.innerHTML = \"opacity:\";\n\n    this.newColorDiv = document.createElement(\"div\");\n    this.newColorDiv.className = \"vis-new-color\";\n    this.newColorDiv.innerHTML = \"new\";\n\n    this.initialColorDiv = document.createElement(\"div\");\n    this.initialColorDiv.className = \"vis-initial-color\";\n    this.initialColorDiv.innerHTML = \"initial\";\n\n    this.cancelButton = document.createElement(\"div\");\n    this.cancelButton.className = \"vis-button vis-cancel\";\n    this.cancelButton.innerHTML = \"cancel\";\n    this.cancelButton.onclick = this._hide.bind(this, false);\n\n    this.applyButton = document.createElement(\"div\");\n    this.applyButton.className = \"vis-button vis-apply\";\n    this.applyButton.innerHTML = \"apply\";\n    this.applyButton.onclick = this._apply.bind(this);\n\n    this.saveButton = document.createElement(\"div\");\n    this.saveButton.className = \"vis-button vis-save\";\n    this.saveButton.innerHTML = \"save\";\n    this.saveButton.onclick = this._save.bind(this);\n\n    this.loadButton = document.createElement(\"div\");\n    this.loadButton.className = \"vis-button vis-load\";\n    this.loadButton.innerHTML = \"load last\";\n    this.loadButton.onclick = this._loadLast.bind(this);\n\n    this.frame.appendChild(this.colorPickerDiv);\n    this.frame.appendChild(this.arrowDiv);\n    this.frame.appendChild(this.brightnessLabel);\n    this.frame.appendChild(this.brightnessDiv);\n    this.frame.appendChild(this.opacityLabel);\n    this.frame.appendChild(this.opacityDiv);\n    this.frame.appendChild(this.newColorDiv);\n    this.frame.appendChild(this.initialColorDiv);\n\n    this.frame.appendChild(this.cancelButton);\n    this.frame.appendChild(this.applyButton);\n    this.frame.appendChild(this.saveButton);\n    this.frame.appendChild(this.loadButton);\n  }\n\n  /**\n   * bind hammer to the color picker\n   * @private\n   */\n  _bindHammer() {\n    this.drag = {};\n    this.pinch = {};\n    this.hammer = new Hammer(this.colorPickerCanvas);\n    this.hammer.get(\"pinch\").set({ enable: true });\n\n    hammerUtil.onTouch(this.hammer, (event) => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"tap\", (event) => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panstart\", (event) => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panmove\", (event) => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panend\", (event) => {\n      this._moveSelector(event);\n    });\n  }\n\n  /**\n   * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.\n   * @private\n   */\n  _generateHueCircle() {\n    if (this.generated === false) {\n      let ctx = this.colorPickerCanvas.getContext(\"2d\");\n      if (this.pixelRation === undefined) {\n        this.pixelRatio =\n          (window.devicePixelRatio || 1) /\n          (ctx.webkitBackingStorePixelRatio ||\n            ctx.mozBackingStorePixelRatio ||\n            ctx.msBackingStorePixelRatio ||\n            ctx.oBackingStorePixelRatio ||\n            ctx.backingStorePixelRatio ||\n            1);\n      }\n      ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n      // clear the canvas\n      let w = this.colorPickerCanvas.clientWidth;\n      let h = this.colorPickerCanvas.clientHeight;\n      ctx.clearRect(0, 0, w, h);\n\n      // draw hue circle\n      let x, y, hue, sat;\n      this.centerCoordinates = { x: w * 0.5, y: h * 0.5 };\n      this.r = 0.49 * w;\n      let angleConvert = (2 * Math.PI) / 360;\n      let hfac = 1 / 360;\n      let sfac = 1 / this.r;\n      let rgb;\n      for (hue = 0; hue < 360; hue++) {\n        for (sat = 0; sat < this.r; sat++) {\n          x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);\n          y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);\n          rgb = util.HSVToRGB(hue * hfac, sat * sfac, 1);\n          ctx.fillStyle = \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\";\n          ctx.fillRect(x - 0.5, y - 0.5, 2, 2);\n        }\n      }\n      ctx.strokeStyle = \"rgba(0,0,0,1)\";\n      ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n      ctx.stroke();\n\n      this.hueCircle = ctx.getImageData(0, 0, w, h);\n    }\n    this.generated = true;\n  }\n\n  /**\n   * move the selector. This is called by hammer functions.\n   *\n   * @param {Event}  event   The event\n   * @private\n   */\n  _moveSelector(event) {\n    let rect = this.colorPickerDiv.getBoundingClientRect();\n    let left = event.center.x - rect.left;\n    let top = event.center.y - rect.top;\n\n    let centerY = 0.5 * this.colorPickerDiv.clientHeight;\n    let centerX = 0.5 * this.colorPickerDiv.clientWidth;\n\n    let x = left - centerX;\n    let y = top - centerY;\n\n    let angle = Math.atan2(x, y);\n    let radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);\n\n    let newTop = Math.cos(angle) * radius + centerY;\n    let newLeft = Math.sin(angle) * radius + centerX;\n\n    this.colorPickerSelector.style.top =\n      newTop - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n    this.colorPickerSelector.style.left =\n      newLeft - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n\n    // set color\n    let h = angle / (2 * Math.PI);\n    h = h < 0 ? h + 1 : h;\n    let s = radius / this.r;\n    let hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.h = h;\n    hsv.s = s;\n    let rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba[\"a\"] = this.color.a;\n    this.color = rgba;\n\n    // update previews\n    this.initialColorDiv.style.backgroundColor =\n      \"rgba(\" +\n      this.initialColor.r +\n      \",\" +\n      this.initialColor.g +\n      \",\" +\n      this.initialColor.b +\n      \",\" +\n      this.initialColor.a +\n      \")\";\n    this.newColorDiv.style.backgroundColor =\n      \"rgba(\" +\n      this.color.r +\n      \",\" +\n      this.color.g +\n      \",\" +\n      this.color.b +\n      \",\" +\n      this.color.a +\n      \")\";\n  }\n}\n\nexport default ColorPicker;\n", "import util from \"../util.js\";\nimport ColorPicker from \"./ColorPicker.js\";\n\n/**\n * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.\n * Boolean options are recognised as Boolean\n * Number options should be written as array: [default value, min value, max value, stepsize]\n * Colors should be written as array: ['color', '#ffffff']\n * Strings with should be written as array: [option1, option2, option3, ..]\n *\n * The options are matched with their counterparts in each of the modules and the values used in the configuration are\n */\nclass Configurator {\n  /**\n   * @param {Object} parentModule        | the location where parentModule.setOptions() can be called\n   * @param {Object} defaultContainer    | the default container of the module\n   * @param {Object} configureOptions    | the fully configured and predefined options set found in allOptions.js\n   * @param {number} pixelRatio          | canvas pixel ratio\n   */\n  constructor(\n    parentModule,\n    defaultContainer,\n    configureOptions,\n    pixelRatio = 1,\n  ) {\n    this.parent = parentModule;\n    this.changedOptions = [];\n    this.container = defaultContainer;\n    this.allowCreation = false;\n\n    this.options = {};\n    this.initialized = false;\n    this.popupCounter = 0;\n    this.defaultOptions = {\n      enabled: false,\n      filter: true,\n      container: undefined,\n      showButton: true,\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.configureOptions = configureOptions;\n    this.moduleOptions = {};\n    this.domElements = [];\n    this.popupDiv = {};\n    this.popupLimit = 5;\n    this.popupHistory = {};\n    this.colorPicker = new ColorPicker(pixelRatio);\n    this.wrapper = undefined;\n  }\n\n  /**\n   * refresh all options.\n   * Because all modules parse their options by themselves, we just use their options. We copy them here.\n   *\n   * @param {Object} options\n   */\n  setOptions(options) {\n    if (options !== undefined) {\n      // reset the popup history because the indices may have been changed.\n      this.popupHistory = {};\n      this._removePopup();\n\n      let enabled = true;\n      if (typeof options === \"string\") {\n        this.options.filter = options;\n      } else if (Array.isArray(options)) {\n        this.options.filter = options.join();\n      } else if (typeof options === \"object\") {\n        if (options == null) {\n          throw new TypeError(\"options cannot be null\");\n        }\n        if (options.container !== undefined) {\n          this.options.container = options.container;\n        }\n        if (options.filter !== undefined) {\n          this.options.filter = options.filter;\n        }\n        if (options.showButton !== undefined) {\n          this.options.showButton = options.showButton;\n        }\n        if (options.enabled !== undefined) {\n          enabled = options.enabled;\n        }\n      } else if (typeof options === \"boolean\") {\n        this.options.filter = true;\n        enabled = options;\n      } else if (typeof options === \"function\") {\n        this.options.filter = options;\n        enabled = true;\n      }\n      if (this.options.filter === false) {\n        enabled = false;\n      }\n\n      this.options.enabled = enabled;\n    }\n    this._clean();\n  }\n\n  /**\n   *\n   * @param {Object} moduleOptions\n   */\n  setModuleOptions(moduleOptions) {\n    this.moduleOptions = moduleOptions;\n    if (this.options.enabled === true) {\n      this._clean();\n      if (this.options.container !== undefined) {\n        this.container = this.options.container;\n      }\n      this._create();\n    }\n  }\n\n  /**\n   * Create all DOM elements\n   * @private\n   */\n  _create() {\n    this._clean();\n    this.changedOptions = [];\n\n    let filter = this.options.filter;\n    let counter = 0;\n    let show = false;\n    for (let option in this.configureOptions) {\n      if (!Object.prototype.hasOwnProperty.call(this.configureOptions, option))\n        continue;\n\n      this.allowCreation = false;\n      show = false;\n\n      if (typeof filter === \"function\") {\n        show = filter(option, []);\n        show =\n          show ||\n          this._handleObject(this.configureOptions[option], [option], true);\n      } else if (filter === true || filter.indexOf(option) !== -1) {\n        show = true;\n      }\n\n      if (show !== false) {\n        this.allowCreation = true;\n\n        // linebreak between categories\n        if (counter > 0) {\n          this._makeItem([]);\n        }\n        // a header for the category\n        this._makeHeader(option);\n\n        // get the sub options\n        this._handleObject(this.configureOptions[option], [option]);\n      }\n\n      counter++;\n    }\n    this._makeButton();\n    this._push();\n    //~ this.colorPicker.insertTo(this.container);\n  }\n\n  /**\n   * draw all DOM elements on the screen\n   * @private\n   */\n  _push() {\n    this.wrapper = document.createElement(\"div\");\n    this.wrapper.className = \"vis-configuration-wrapper\";\n    this.container.appendChild(this.wrapper);\n    for (var i = 0; i < this.domElements.length; i++) {\n      this.wrapper.appendChild(this.domElements[i]);\n    }\n\n    this._showPopupIfNeeded();\n  }\n\n  /**\n   * delete all DOM elements\n   * @private\n   */\n  _clean() {\n    for (var i = 0; i < this.domElements.length; i++) {\n      this.wrapper.removeChild(this.domElements[i]);\n    }\n\n    if (this.wrapper !== undefined) {\n      this.container.removeChild(this.wrapper);\n      this.wrapper = undefined;\n    }\n    this.domElements = [];\n\n    this._removePopup();\n  }\n\n  /**\n   * get the value from the actualOptions if it exists\n   * @param {array} path    | where to look for the actual option\n   * @returns {*}\n   * @private\n   */\n  _getValue(path) {\n    let base = this.moduleOptions;\n    for (let i = 0; i < path.length; i++) {\n      if (base[path[i]] !== undefined) {\n        base = base[path[i]];\n      } else {\n        base = undefined;\n        break;\n      }\n    }\n    return base;\n  }\n\n  /**\n   * all option elements are wrapped in an item\n   * @param {Array} path    | where to look for the actual option\n   * @param {Array.<Element>} domElements\n   * @returns {number}\n   * @private\n   */\n  _makeItem(path, ...domElements) {\n    if (this.allowCreation === true) {\n      let item = document.createElement(\"div\");\n      item.className =\n        \"vis-configuration vis-config-item vis-config-s\" + path.length;\n      domElements.forEach((element) => {\n        item.appendChild(element);\n      });\n      this.domElements.push(item);\n      return this.domElements.length;\n    }\n    return 0;\n  }\n\n  /**\n   * header for major subjects\n   * @param {string} name\n   * @private\n   */\n  _makeHeader(name) {\n    let div = document.createElement(\"div\");\n    div.className = \"vis-configuration vis-config-header\";\n    div.innerHTML = util.xss(name);\n    this._makeItem([], div);\n  }\n\n  /**\n   * make a label, if it is an object label, it gets different styling.\n   * @param {string} name\n   * @param {array} path    | where to look for the actual option\n   * @param {string} objectLabel\n   * @returns {HTMLElement}\n   * @private\n   */\n  _makeLabel(name, path, objectLabel = false) {\n    let div = document.createElement(\"div\");\n    div.className =\n      \"vis-configuration vis-config-label vis-config-s\" + path.length;\n    if (objectLabel === true) {\n      div.innerHTML = util.xss(\"<i><b>\" + name + \":</b></i>\");\n    } else {\n      div.innerHTML = util.xss(name + \":\");\n    }\n    return div;\n  }\n\n  /**\n   * make a dropdown list for multiple possible string optoins\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _makeDropdown(arr, value, path) {\n    let select = document.createElement(\"select\");\n    select.className = \"vis-configuration vis-config-select\";\n    let selectedValue = 0;\n    if (value !== undefined) {\n      if (arr.indexOf(value) !== -1) {\n        selectedValue = arr.indexOf(value);\n      }\n    }\n\n    for (let i = 0; i < arr.length; i++) {\n      let option = document.createElement(\"option\");\n      option.value = arr[i];\n      if (i === selectedValue) {\n        option.selected = \"selected\";\n      }\n      option.innerHTML = arr[i];\n      select.appendChild(option);\n    }\n\n    let me = this;\n    select.onchange = function () {\n      me._update(this.value, path);\n    };\n\n    let label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, select);\n  }\n\n  /**\n   * make a range object for numeric options\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _makeRange(arr, value, path) {\n    let defaultValue = arr[0];\n    let min = arr[1];\n    let max = arr[2];\n    let step = arr[3];\n    let range = document.createElement(\"input\");\n    range.className = \"vis-configuration vis-config-range\";\n    try {\n      range.type = \"range\"; // not supported on IE9\n      range.min = min;\n      range.max = max;\n    } catch (err) {\n      // TODO: Add some error handling and remove this lint exception\n    } // eslint-disable-line no-empty\n    range.step = step;\n\n    // set up the popup settings in case they are needed.\n    let popupString = \"\";\n    let popupValue = 0;\n\n    if (value !== undefined) {\n      let factor = 1.2;\n      if (value < 0 && value * factor < min) {\n        range.min = Math.ceil(value * factor);\n        popupValue = range.min;\n        popupString = \"range increased\";\n      } else if (value / factor < min) {\n        range.min = Math.ceil(value / factor);\n        popupValue = range.min;\n        popupString = \"range increased\";\n      }\n      if (value * factor > max && max !== 1) {\n        range.max = Math.ceil(value * factor);\n        popupValue = range.max;\n        popupString = \"range increased\";\n      }\n      range.value = value;\n    } else {\n      range.value = defaultValue;\n    }\n\n    let input = document.createElement(\"input\");\n    input.className = \"vis-configuration vis-config-rangeinput\";\n    input.value = Number(range.value);\n\n    var me = this;\n    range.onchange = function () {\n      input.value = this.value;\n      me._update(Number(this.value), path);\n    };\n    range.oninput = function () {\n      input.value = this.value;\n    };\n\n    let label = this._makeLabel(path[path.length - 1], path);\n    let itemIndex = this._makeItem(path, label, range, input);\n\n    // if a popup is needed AND it has not been shown for this value, show it.\n    if (popupString !== \"\" && this.popupHistory[itemIndex] !== popupValue) {\n      this.popupHistory[itemIndex] = popupValue;\n      this._setupPopup(popupString, itemIndex);\n    }\n  }\n\n  /**\n   * make a button object\n   * @private\n   */\n  _makeButton() {\n    if (this.options.showButton === true) {\n      let generateButton = document.createElement(\"div\");\n      generateButton.className = \"vis-configuration vis-config-button\";\n      generateButton.innerHTML = \"generate options\";\n      generateButton.onclick = () => {\n        this._printOptions();\n      };\n      generateButton.onmouseover = () => {\n        generateButton.className = \"vis-configuration vis-config-button hover\";\n      };\n      generateButton.onmouseout = () => {\n        generateButton.className = \"vis-configuration vis-config-button\";\n      };\n\n      this.optionsContainer = document.createElement(\"div\");\n      this.optionsContainer.className =\n        \"vis-configuration vis-config-option-container\";\n\n      this.domElements.push(this.optionsContainer);\n      this.domElements.push(generateButton);\n    }\n  }\n\n  /**\n   * prepare the popup\n   * @param {string} string\n   * @param {number} index\n   * @private\n   */\n  _setupPopup(string, index) {\n    if (\n      this.initialized === true &&\n      this.allowCreation === true &&\n      this.popupCounter < this.popupLimit\n    ) {\n      let div = document.createElement(\"div\");\n      div.id = \"vis-configuration-popup\";\n      div.className = \"vis-configuration-popup\";\n      div.innerHTML = util.xss(string);\n      div.onclick = () => {\n        this._removePopup();\n      };\n      this.popupCounter += 1;\n      this.popupDiv = { html: div, index: index };\n    }\n  }\n\n  /**\n   * remove the popup from the dom\n   * @private\n   */\n  _removePopup() {\n    if (this.popupDiv.html !== undefined) {\n      this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);\n      clearTimeout(this.popupDiv.hideTimeout);\n      clearTimeout(this.popupDiv.deleteTimeout);\n      this.popupDiv = {};\n    }\n  }\n\n  /**\n   * Show the popup if it is needed.\n   * @private\n   */\n  _showPopupIfNeeded() {\n    if (this.popupDiv.html !== undefined) {\n      let correspondingElement = this.domElements[this.popupDiv.index];\n      let rect = correspondingElement.getBoundingClientRect();\n      this.popupDiv.html.style.left = rect.left + \"px\";\n      this.popupDiv.html.style.top = rect.top - 30 + \"px\"; // 30 is the height;\n      document.body.appendChild(this.popupDiv.html);\n      this.popupDiv.hideTimeout = setTimeout(() => {\n        this.popupDiv.html.style.opacity = 0;\n      }, 1500);\n      this.popupDiv.deleteTimeout = setTimeout(() => {\n        this._removePopup();\n      }, 1800);\n    }\n  }\n\n  /**\n   * make a checkbox for boolean options.\n   * @param {number} defaultValue\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _makeCheckbox(defaultValue, value, path) {\n    var checkbox = document.createElement(\"input\");\n    checkbox.type = \"checkbox\";\n    checkbox.className = \"vis-configuration vis-config-checkbox\";\n    checkbox.checked = defaultValue;\n    if (value !== undefined) {\n      checkbox.checked = value;\n      if (value !== defaultValue) {\n        if (typeof defaultValue === \"object\") {\n          if (value !== defaultValue.enabled) {\n            this.changedOptions.push({ path: path, value: value });\n          }\n        } else {\n          this.changedOptions.push({ path: path, value: value });\n        }\n      }\n    }\n\n    let me = this;\n    checkbox.onchange = function () {\n      me._update(this.checked, path);\n    };\n\n    let label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n  /**\n   * make a text input field for string options.\n   * @param {number} defaultValue\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _makeTextInput(defaultValue, value, path) {\n    var checkbox = document.createElement(\"input\");\n    checkbox.type = \"text\";\n    checkbox.className = \"vis-configuration vis-config-text\";\n    checkbox.value = value;\n    if (value !== defaultValue) {\n      this.changedOptions.push({ path: path, value: value });\n    }\n\n    let me = this;\n    checkbox.onchange = function () {\n      me._update(this.value, path);\n    };\n\n    let label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n  /**\n   * make a color field with a color picker for color fields\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _makeColorField(arr, value, path) {\n    let defaultColor = arr[1];\n    let div = document.createElement(\"div\");\n    value = value === undefined ? defaultColor : value;\n\n    if (value !== \"none\") {\n      div.className = \"vis-configuration vis-config-colorBlock\";\n      div.style.backgroundColor = value;\n    } else {\n      div.className = \"vis-configuration vis-config-colorBlock none\";\n    }\n\n    value = value === undefined ? defaultColor : value;\n    div.onclick = () => {\n      this._showColorPicker(value, div, path);\n    };\n\n    let label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, div);\n  }\n\n  /**\n   * used by the color buttons to call the color picker.\n   * @param {number} value\n   * @param {HTMLElement} div\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _showColorPicker(value, div, path) {\n    // clear the callback from this div\n    div.onclick = function () {};\n\n    this.colorPicker.insertTo(div);\n    this.colorPicker.show();\n\n    this.colorPicker.setColor(value);\n    this.colorPicker.setUpdateCallback((color) => {\n      let colorString =\n        \"rgba(\" + color.r + \",\" + color.g + \",\" + color.b + \",\" + color.a + \")\";\n      div.style.backgroundColor = colorString;\n      this._update(colorString, path);\n    });\n\n    // on close of the colorpicker, restore the callback.\n    this.colorPicker.setCloseCallback(() => {\n      div.onclick = () => {\n        this._showColorPicker(value, div, path);\n      };\n    });\n  }\n\n  /**\n   * parse an object and draw the correct items\n   * @param {Object} obj\n   * @param {array} [path=[]]    | where to look for the actual option\n   * @param {boolean} [checkOnly=false]\n   * @returns {boolean}\n   * @private\n   */\n  _handleObject(obj, path = [], checkOnly = false) {\n    let show = false;\n    let filter = this.options.filter;\n    let visibleInSet = false;\n    for (let subObj in obj) {\n      if (!Object.prototype.hasOwnProperty.call(obj, subObj)) continue;\n\n      show = true;\n      let item = obj[subObj];\n      let newPath = util.copyAndExtendArray(path, subObj);\n\n      if (typeof filter === \"function\") {\n        show = filter(subObj, path);\n\n        // if needed we must go deeper into the object.\n        if (show === false) {\n          if (\n            !Array.isArray(item) &&\n            typeof item !== \"string\" &&\n            typeof item !== \"boolean\" &&\n            item instanceof Object\n          ) {\n            this.allowCreation = false;\n            show = this._handleObject(item, newPath, true);\n            this.allowCreation = checkOnly === false;\n          }\n        }\n      }\n\n      if (show !== false) {\n        visibleInSet = true;\n        let value = this._getValue(newPath);\n\n        if (Array.isArray(item)) {\n          this._handleArray(item, value, newPath);\n        } else if (typeof item === \"string\") {\n          this._makeTextInput(item, value, newPath);\n        } else if (typeof item === \"boolean\") {\n          this._makeCheckbox(item, value, newPath);\n        } else if (item instanceof Object) {\n          // collapse the physics options that are not enabled\n          let draw = true;\n          if (path.indexOf(\"physics\") !== -1) {\n            if (this.moduleOptions.physics.solver !== subObj) {\n              draw = false;\n            }\n          }\n\n          if (draw === true) {\n            // initially collapse options with an disabled enabled option.\n            if (item.enabled !== undefined) {\n              let enabledPath = util.copyAndExtendArray(newPath, \"enabled\");\n              let enabledValue = this._getValue(enabledPath);\n              if (enabledValue === true) {\n                let label = this._makeLabel(subObj, newPath, true);\n                this._makeItem(newPath, label);\n                visibleInSet =\n                  this._handleObject(item, newPath) || visibleInSet;\n              } else {\n                this._makeCheckbox(item, enabledValue, newPath);\n              }\n            } else {\n              let label = this._makeLabel(subObj, newPath, true);\n              this._makeItem(newPath, label);\n              visibleInSet = this._handleObject(item, newPath) || visibleInSet;\n            }\n          }\n        } else {\n          console.error(\"dont know how to handle\", item, subObj, newPath);\n        }\n      }\n    }\n    return visibleInSet;\n  }\n\n  /**\n   * handle the array type of option\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _handleArray(arr, value, path) {\n    if (typeof arr[0] === \"string\" && arr[0] === \"color\") {\n      this._makeColorField(arr, value, path);\n      if (arr[1] !== value) {\n        this.changedOptions.push({ path: path, value: value });\n      }\n    } else if (typeof arr[0] === \"string\") {\n      this._makeDropdown(arr, value, path);\n      if (arr[0] !== value) {\n        this.changedOptions.push({ path: path, value: value });\n      }\n    } else if (typeof arr[0] === \"number\") {\n      this._makeRange(arr, value, path);\n      if (arr[0] !== value) {\n        this.changedOptions.push({ path: path, value: Number(value) });\n      }\n    }\n  }\n\n  /**\n   * called to update the network with the new settings.\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _update(value, path) {\n    let options = this._constructOptions(value, path);\n\n    if (\n      this.parent.body &&\n      this.parent.body.emitter &&\n      this.parent.body.emitter.emit\n    ) {\n      this.parent.body.emitter.emit(\"configChange\", options);\n    }\n    this.initialized = true;\n    this.parent.setOptions(options);\n  }\n\n  /**\n   *\n   * @param {string|Boolean} value\n   * @param {Array.<string>} path\n   * @param {{}} optionsObj\n   * @returns {{}}\n   * @private\n   */\n  _constructOptions(value, path, optionsObj = {}) {\n    let pointer = optionsObj;\n\n    // when dropdown boxes can be string or boolean, we typecast it into correct types\n    value = value === \"true\" ? true : value;\n    value = value === \"false\" ? false : value;\n\n    for (let i = 0; i < path.length; i++) {\n      if (path[i] !== \"global\") {\n        if (pointer[path[i]] === undefined) {\n          pointer[path[i]] = {};\n        }\n        if (i !== path.length - 1) {\n          pointer = pointer[path[i]];\n        } else {\n          pointer[path[i]] = value;\n        }\n      }\n    }\n    return optionsObj;\n  }\n\n  /**\n   * @private\n   */\n  _printOptions() {\n    let options = this.getOptions();\n    this.optionsContainer.innerHTML =\n      \"<pre>var options = \" + JSON.stringify(options, null, 2) + \"</pre>\";\n  }\n\n  /**\n   *\n   * @returns {{}} options\n   */\n  getOptions() {\n    let options = {};\n    for (var i = 0; i < this.changedOptions.length; i++) {\n      this._constructOptions(\n        this.changedOptions[i].value,\n        this.changedOptions[i].path,\n        options,\n      );\n    }\n    return options;\n  }\n}\n\nexport default Configurator;\n", "import moment from \"../module/moment.js\";\nimport util, { typeCoerceDataSet, isDataViewLike } from \"../util.js\";\nimport { DataSet, DataView } from \"vis-data/esnext\";\nimport Range from \"./Range.js\";\nimport Core from \"./Core.js\";\nimport TimeAxis from \"./component/TimeAxis.js\";\nimport CurrentTime from \"./component/CurrentTime.js\";\nimport CustomTime from \"./component/CustomTime.js\";\nimport ItemSet from \"./component/ItemSet.js\";\n\nimport { Validator } from \"../shared/Validator.js\";\nimport { printStyle } from \"../shared/Validator.js\";\nimport { allOptions } from \"./optionsTimeline.js\";\nimport { configureOptions } from \"./optionsTimeline.js\";\n\nimport Configurator from \"../shared/Configurator.js\";\n\n/**\n * Create a timeline visualization\n * @extends Core\n */\nexport default class Timeline extends Core {\n  /**\n   * @param {HTMLElement} container\n   * @param {vis.DataSet | vis.DataView | Array} [items]\n   * @param {vis.DataSet | vis.DataView | Array} [groups]\n   * @param {Object} [options]  See Timeline.setOptions for the available options.\n   * @constructor Timeline\n   */\n  constructor(container, items, groups, options) {\n    super();\n    this.initTime = new Date();\n    this.itemsDone = false;\n\n    if (!(this instanceof Timeline)) {\n      throw new SyntaxError(\"Constructor must be called with the new operator\");\n    }\n\n    // if the third element is options, the forth is groups (optionally);\n    if (\n      !(Array.isArray(groups) || isDataViewLike(groups)) &&\n      groups instanceof Object\n    ) {\n      const forthArgument = options;\n      options = groups;\n      groups = forthArgument;\n    }\n\n    // TODO: REMOVE THIS in the next MAJOR release\n    // see https://github.com/almende/vis/issues/2511\n    if (options && options.throttleRedraw) {\n      console.warn(\n        'Timeline option \"throttleRedraw\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.',\n      );\n    }\n\n    const me = this;\n    this.defaultOptions = {\n      autoResize: true,\n      longSelectPressTime: 251,\n      orientation: {\n        axis: \"bottom\", // axis orientation: 'bottom', 'top', or 'both'\n        item: \"bottom\", // not relevant\n      },\n      moment,\n    };\n    this.options = util.deepExtend({}, this.defaultOptions);\n    options && util.setupXSSProtection(options.xss);\n\n    // Create the DOM, props, and emitter\n    this._create(container);\n    if (!options || (options && typeof options.rtl == \"undefined\")) {\n      this.dom.root.style.visibility = \"hidden\";\n      let directionFromDom;\n      let domNode = this.dom.root;\n      while (!directionFromDom && domNode) {\n        directionFromDom = window.getComputedStyle(domNode, null).direction;\n        domNode = domNode.parentElement;\n      }\n      this.options.rtl =\n        directionFromDom && directionFromDom.toLowerCase() == \"rtl\";\n    } else {\n      this.options.rtl = options.rtl;\n    }\n\n    if (options) {\n      if (options.rollingMode) {\n        this.options.rollingMode = options.rollingMode;\n      }\n      if (options.onInitialDrawComplete) {\n        this.options.onInitialDrawComplete = options.onInitialDrawComplete;\n      }\n      if (options.onTimeout) {\n        this.options.onTimeout = options.onTimeout;\n      }\n      if (options.loadingScreenTemplate) {\n        this.options.loadingScreenTemplate = options.loadingScreenTemplate;\n      }\n    }\n\n    // Prepare loading screen\n    const loadingScreenFragment = document.createElement(\"div\");\n    if (this.options.loadingScreenTemplate) {\n      const templateFunction = this.options.loadingScreenTemplate.bind(this);\n      const loadingScreen = templateFunction(this.dom.loadingScreen);\n      if (\n        loadingScreen instanceof Object &&\n        !(loadingScreen instanceof Element)\n      ) {\n        templateFunction(loadingScreenFragment);\n      } else {\n        if (loadingScreen instanceof Element) {\n          loadingScreenFragment.innerHTML = \"\";\n          loadingScreenFragment.appendChild(loadingScreen);\n        } else if (loadingScreen != undefined) {\n          loadingScreenFragment.innerHTML = util.xss(loadingScreen);\n        }\n      }\n    }\n    this.dom.loadingScreen.appendChild(loadingScreenFragment);\n\n    // all components listed here will be repainted automatically\n    this.components = [];\n\n    this.body = {\n      dom: this.dom,\n      domProps: this.props,\n      emitter: {\n        on: this.on.bind(this),\n        off: this.off.bind(this),\n        emit: this.emit.bind(this),\n      },\n      hiddenDates: [],\n      util: {\n        getScale() {\n          return me.timeAxis.step.scale;\n        },\n        getStep() {\n          return me.timeAxis.step.step;\n        },\n\n        toScreen: me._toScreen.bind(me),\n        toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width\n        toTime: me._toTime.bind(me),\n        toGlobalTime: me._toGlobalTime.bind(me),\n      },\n    };\n\n    // range\n    this.range = new Range(this.body, this.options);\n    this.components.push(this.range);\n    this.body.range = this.range;\n\n    // time axis\n    this.timeAxis = new TimeAxis(this.body, this.options);\n    this.timeAxis2 = null; // used in case of orientation option 'both'\n    this.components.push(this.timeAxis);\n\n    // current time bar\n    this.currentTime = new CurrentTime(this.body, this.options);\n    this.components.push(this.currentTime);\n\n    // item set\n    this.itemSet = new ItemSet(this.body, this.options);\n    this.components.push(this.itemSet);\n\n    this.itemsData = null; // DataSet\n    this.groupsData = null; // DataSet\n\n    /**\n     * Emit an event.\n     * @param {string} eventName Name of event.\n     * @param {Event} event The event object.\n     */\n    function emit(eventName, event) {\n      if (!me.hasListeners(eventName)) return;\n\n      me.emit(eventName, me.getEventProperties(event));\n    }\n\n    this.dom.root.onclick = (event) => emit(\"click\", event);\n    this.dom.root.ondblclick = (event) => emit(\"doubleClick\", event);\n    this.dom.root.oncontextmenu = (event) => emit(\"contextmenu\", event);\n    this.dom.root.onmouseover = (event) => emit(\"mouseOver\", event);\n    if (window.PointerEvent) {\n      this.dom.root.onpointerdown = (event) => emit(\"mouseDown\", event);\n      this.dom.root.onpointermove = (event) => emit(\"mouseMove\", event);\n      this.dom.root.onpointerup = (event) => emit(\"mouseUp\", event);\n    } else {\n      this.dom.root.onmousemove = (event) => emit(\"mouseMove\", event);\n      this.dom.root.onmousedown = (event) => emit(\"mouseDown\", event);\n      this.dom.root.onmouseup = (event) => emit(\"mouseUp\", event);\n    }\n\n    //Single time autoscale/fit\n    this.initialFitDone = false;\n    this.on(\"changed\", () => {\n      if (me.itemsData == null) return;\n      if (!me.initialFitDone && !me.options.rollingMode) {\n        me.initialFitDone = true;\n        if (me.options.start != undefined || me.options.end != undefined) {\n          if (me.options.start == undefined || me.options.end == undefined) {\n            var range = me.getItemRange();\n          }\n\n          const start =\n            me.options.start != undefined ? me.options.start : range.min;\n          const end = me.options.end != undefined ? me.options.end : range.max;\n          me.setWindow(start, end, { animation: false });\n        } else {\n          me.fit({ animation: false });\n        }\n      }\n\n      if (\n        !me.initialDrawDone &&\n        (me.initialRangeChangeDone ||\n          (!me.options.start && !me.options.end) ||\n          me.options.rollingMode)\n      ) {\n        me.initialDrawDone = true;\n        me.itemSet.initialDrawDone = true;\n        me.dom.root.style.visibility = \"visible\";\n        me.dom.loadingScreen.parentNode.removeChild(me.dom.loadingScreen);\n        if (me.options.onInitialDrawComplete) {\n          setTimeout(() => {\n            return me.options.onInitialDrawComplete();\n          }, 0);\n        }\n      }\n    });\n\n    this.on(\"destroyTimeline\", () => {\n      me.destroy();\n    });\n\n    // apply options\n    if (options) {\n      this.setOptions(options);\n    }\n\n    this.body.emitter.on(\"fit\", (args) => {\n      this._onFit(args);\n      this.redraw();\n    });\n\n    // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS!\n    if (groups) {\n      this.setGroups(groups);\n    }\n\n    // create itemset\n    if (items) {\n      this.setItems(items);\n    }\n\n    // draw for the first time\n    this._redraw();\n  }\n\n  /**\n   * Load a configurator\n   * @return {Object}\n   * @private\n   */\n  _createConfigurator() {\n    return new Configurator(this, this.dom.container, configureOptions);\n  }\n\n  /**\n   * Force a redraw. The size of all items will be recalculated.\n   * Can be useful to manually redraw when option autoResize=false and the window\n   * has been resized, or when the items CSS has been changed.\n   *\n   * Note: this function will be overridden on construction with a trottled version\n   */\n  redraw() {\n    this.itemSet && this.itemSet.markDirty({ refreshItems: true });\n    this._redraw();\n  }\n\n  /**\n   * Remove an item from the group\n   * @param {object} options\n   */\n  setOptions(options) {\n    // validate options\n    let errorFound = Validator.validate(options, allOptions);\n\n    if (errorFound === true) {\n      console.log(\n        \"%cErrors have been found in the supplied options object.\",\n        printStyle,\n      );\n    }\n\n    Core.prototype.setOptions.call(this, options);\n\n    if (\"type\" in options) {\n      if (options.type !== this.options.type) {\n        this.options.type = options.type;\n\n        // force recreation of all items\n        const itemsData = this.itemsData;\n        if (itemsData) {\n          const selection = this.getSelection();\n          this.setItems(null); // remove all\n          this.setItems(itemsData.rawDS); // add all\n          this.setSelection(selection); // restore selection\n        }\n      }\n    }\n  }\n\n  /**\n   * Set items\n   * @param {vis.DataSet | Array | null} items\n   */\n  setItems(items) {\n    this.itemsDone = false;\n\n    // convert to type DataSet when needed\n    let newDataSet;\n    if (!items) {\n      newDataSet = null;\n    } else if (isDataViewLike(items)) {\n      newDataSet = typeCoerceDataSet(items);\n    } else {\n      // turn an array into a dataset\n      newDataSet = typeCoerceDataSet(new DataSet(items));\n    }\n\n    // set items\n    if (this.itemsData) {\n      // stop maintaining a coerced version of the old data set\n      this.itemsData.dispose();\n    }\n    this.itemsData = newDataSet;\n    this.itemSet &&\n      this.itemSet.setItems(newDataSet != null ? newDataSet.rawDS : null);\n  }\n\n  /**\n   * Set groups\n   * @param {vis.DataSet | Array} groups\n   */\n  setGroups(groups) {\n    // convert to type DataSet when needed\n    let newDataSet;\n    const filter = (group) => group.visible !== false;\n\n    if (!groups) {\n      newDataSet = null;\n    } else {\n      // If groups is array, turn to DataSet & build dataview from that\n      if (Array.isArray(groups)) groups = new DataSet(groups);\n\n      newDataSet = new DataView(groups, { filter });\n    }\n\n    // This looks weird but it's necessary to prevent memory leaks.\n    //\n    // The problem is that the DataView will exist as long as the DataSet it's\n    // connected to. This will force it to swap the groups DataSet for it's own\n    // DataSet. In this arrangement it will become unreferenced from the outside\n    // and garbage collected.\n    //\n    // IMPORTANT NOTE: If `this.groupsData` is a DataView was created in this\n    // method. Even if the original is a DataView already a new one has been\n    // created and assigned to `this.groupsData`. In case this changes in the\n    // future it will be necessary to rework this!!!!\n    if (\n      this.groupsData != null &&\n      typeof this.groupsData.setData === \"function\"\n    ) {\n      this.groupsData.setData(null);\n    }\n    this.groupsData = newDataSet;\n    this.itemSet.setGroups(newDataSet);\n  }\n\n  /**\n   * Set both items and groups in one go\n   * @param {{items: (Array | vis.DataSet), groups: (Array | vis.DataSet)}} data\n   */\n  setData(data) {\n    if (data && data.groups) {\n      this.setGroups(data.groups);\n    }\n\n    if (data && data.items) {\n      this.setItems(data.items);\n    }\n  }\n\n  /**\n   * Set selected items by their id. Replaces the current selection\n   * Unknown id's are silently ignored.\n   * @param {string[] | string} [ids]  An array with zero or more id's of the items to be\n   *                                selected. If ids is an empty array, all items will be\n   *                                unselected.\n   * @param {Object} [options]      Available options:\n   *                                `focus: boolean`\n   *                                    If true, focus will be set to the selected item(s)\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   *                                    Only applicable when option focus is true.\n   */\n  setSelection(ids, options) {\n    this.itemSet && this.itemSet.setSelection(ids);\n\n    if (options && options.focus) {\n      this.focus(ids, options);\n    }\n  }\n\n  /**\n   * Get the selected items by their id\n   * @return {Array} ids  The ids of the selected items\n   */\n  getSelection() {\n    return (this.itemSet && this.itemSet.getSelection()) || [];\n  }\n\n  /**\n   * Adjust the visible window such that the selected item (or multiple items)\n   * are centered on screen.\n   * @param {string | String[]} id     An item id or array with item ids\n   * @param {Object} [options]      Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   *                                `zoom: boolean`\n   *                                    If true (default), the timeline will\n   *                                    zoom on the element after focus it.\n   */\n  focus(id, options) {\n    if (!this.itemsData || id == undefined) return;\n\n    const ids = Array.isArray(id) ? id : [id];\n\n    // get the specified item(s)\n    const itemsData = this.itemsData.get(ids);\n\n    // calculate minimum start and maximum end of specified items\n    let start = null;\n    let end = null;\n    itemsData.forEach((itemData) => {\n      const s = itemData.start.valueOf();\n      const e =\n        \"end\" in itemData ? itemData.end.valueOf() : itemData.start.valueOf();\n\n      if (start === null || s < start) {\n        start = s;\n      }\n\n      if (end === null || e > end) {\n        end = e;\n      }\n    });\n\n    if (start !== null && end !== null) {\n      const me = this;\n      // Use the first item for the vertical focus\n      const item = this.itemSet.items[ids[0]];\n      let startPos = this._getScrollTop() * -1;\n      let initialVerticalScroll = null;\n\n      // Setup a handler for each frame of the vertical scroll\n      const verticalAnimationFrame = (ease, willDraw, done) => {\n        const verticalScroll = getItemVerticalScroll(me, item);\n\n        if (verticalScroll === false) {\n          return; // We don't need to scroll, so do nothing\n        }\n\n        if (!initialVerticalScroll) {\n          initialVerticalScroll = verticalScroll;\n        }\n\n        if (\n          initialVerticalScroll.itemTop == verticalScroll.itemTop &&\n          !initialVerticalScroll.shouldScroll\n        ) {\n          return; // We don't need to scroll, so do nothing\n        } else if (\n          initialVerticalScroll.itemTop != verticalScroll.itemTop &&\n          verticalScroll.shouldScroll\n        ) {\n          // The redraw shifted elements, so reset the animation to correct\n          initialVerticalScroll = verticalScroll;\n          startPos = me._getScrollTop() * -1;\n        }\n\n        const from = startPos;\n        const to = initialVerticalScroll.scrollOffset;\n        const scrollTop = done ? to : from + (to - from) * ease;\n\n        me._setScrollTop(-scrollTop);\n\n        if (!willDraw) {\n          me._redraw();\n        }\n      };\n\n      // Enforces the final vertical scroll position\n      const setFinalVerticalPosition = () => {\n        const finalVerticalScroll = getItemVerticalScroll(me, item);\n\n        if (\n          finalVerticalScroll.shouldScroll &&\n          finalVerticalScroll.itemTop != initialVerticalScroll.itemTop\n        ) {\n          me._setScrollTop(-finalVerticalScroll.scrollOffset);\n          me._redraw();\n        }\n      };\n\n      // Perform one last check at the end to make sure the final vertical\n      // position is correct\n      const finalVerticalCallback = () => {\n        // Double check we ended at the proper scroll position\n        setFinalVerticalPosition();\n\n        // Let the redraw settle and finalize the position.\n        setTimeout(setFinalVerticalPosition, 100);\n      };\n\n      // calculate the new middle and interval for the window\n      const zoom = options && options.zoom !== undefined ? options.zoom : true;\n      const middle = (start + end) / 2;\n      const interval = zoom\n        ? (end - start) * 1.1\n        : Math.max(this.range.end - this.range.start, (end - start) * 1.1);\n\n      const animation =\n        options && options.animation !== undefined ? options.animation : true;\n\n      if (!animation) {\n        // We aren't animating so set a default so that the final callback forces the vertical location\n        initialVerticalScroll = {\n          shouldScroll: false,\n          scrollOffset: -1,\n          itemTop: -1,\n        };\n      }\n\n      this.range.stopRolling();\n      this.range.setRange(\n        middle - interval / 2,\n        middle + interval / 2,\n        { animation },\n        finalVerticalCallback,\n        verticalAnimationFrame,\n      );\n    }\n  }\n\n  /**\n   * Set Timeline window such that it fits all items\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback]\n   */\n  fit(options, callback) {\n    const animation =\n      options && options.animation !== undefined ? options.animation : true;\n    let range;\n\n    if (\n      this.itemsData.length === 1 &&\n      this.itemsData.get()[0].end === undefined\n    ) {\n      // a single item -> don't fit, just show a range around the item from -4 to +3 days\n      range = this.getDataRange();\n      this.moveTo(range.min.valueOf(), { animation }, callback);\n    } else {\n      // exactly fit the items (plus a small margin)\n      range = this.getItemRange();\n      this.range.setRange(range.min, range.max, { animation }, callback);\n    }\n  }\n\n  /**\n   * Determine the range of the items, taking into account their actual width\n   * and a margin of 10 pixels on both sides.\n   *\n   * @returns {{min: Date, max: Date}}\n   */\n  getItemRange() {\n    // get a rough approximation for the range based on the items start and end dates\n    const range = this.getDataRange();\n    let min = range.min !== null ? range.min.valueOf() : null;\n    let max = range.max !== null ? range.max.valueOf() : null;\n    let minItem = null;\n    let maxItem = null;\n\n    if (min != null && max != null) {\n      let interval = max - min; // ms\n      if (interval <= 0) {\n        interval = 10;\n      }\n      const factor = interval / this.props.center.width;\n\n      const redrawQueue = {};\n      let redrawQueueLength = 0;\n\n      // collect redraw functions\n      util.forEach(this.itemSet.items, (item, key) => {\n        if (item.groupShowing) {\n          const returnQueue = true;\n          redrawQueue[key] = item.redraw(returnQueue);\n          redrawQueueLength = redrawQueue[key].length;\n        }\n      });\n\n      const needRedraw = redrawQueueLength > 0;\n      if (needRedraw) {\n        // redraw all regular items\n        for (let i = 0; i < redrawQueueLength; i++) {\n          util.forEach(redrawQueue, (fns) => {\n            fns[i]();\n          });\n        }\n      }\n\n      // calculate the date of the left side and right side of the items given\n      util.forEach(this.itemSet.items, (item) => {\n        const start = getStart(item);\n        const end = getEnd(item);\n        let startSide;\n        let endSide;\n\n        if (this.options.rtl) {\n          startSide = start - (item.getWidthRight() + 10) * factor;\n          endSide = end + (item.getWidthLeft() + 10) * factor;\n        } else {\n          startSide = start - (item.getWidthLeft() + 10) * factor;\n          endSide = end + (item.getWidthRight() + 10) * factor;\n        }\n\n        if (startSide < min) {\n          min = startSide;\n          minItem = item;\n        }\n        if (endSide > max) {\n          max = endSide;\n          maxItem = item;\n        }\n      });\n\n      if (minItem && maxItem) {\n        const lhs = minItem.getWidthLeft() + 10;\n        const rhs = maxItem.getWidthRight() + 10;\n        const delta = this.props.center.width - lhs - rhs; // px\n\n        if (delta > 0) {\n          if (this.options.rtl) {\n            min = getStart(minItem) - (rhs * interval) / delta; // ms\n            max = getEnd(maxItem) + (lhs * interval) / delta; // ms\n          } else {\n            min = getStart(minItem) - (lhs * interval) / delta; // ms\n            max = getEnd(maxItem) + (rhs * interval) / delta; // ms\n          }\n        }\n      }\n    }\n\n    return {\n      min: min != null ? new Date(min) : null,\n      max: max != null ? new Date(max) : null,\n    };\n  }\n\n  /**\n   * Calculate the data range of the items start and end dates\n   * @returns {{min: Date, max: Date}}\n   */\n  getDataRange() {\n    let min = null;\n    let max = null;\n\n    if (this.itemsData) {\n      this.itemsData.forEach((item) => {\n        const start = util.convert(item.start, \"Date\").valueOf();\n        const end = util\n          .convert(item.end != undefined ? item.end : item.start, \"Date\")\n          .valueOf();\n        if (min === null || start < min) {\n          min = start;\n        }\n        if (max === null || end > max) {\n          max = end;\n        }\n      });\n    }\n\n    return {\n      min: min != null ? new Date(min) : null,\n      max: max != null ? new Date(max) : null,\n    };\n  }\n\n  /**\n   * Generate Timeline related information from an event\n   * @param {Event} event\n   * @return {Object} An object with related information, like on which area\n   *                  The event happened, whether clicked on an item, etc.\n   */\n  getEventProperties(event) {\n    const clientX = event.center ? event.center.x : event.clientX;\n    const clientY = event.center ? event.center.y : event.clientY;\n    const centerContainerRect =\n      this.dom.centerContainer.getBoundingClientRect();\n    const x = this.options.rtl\n      ? centerContainerRect.right - clientX\n      : clientX - centerContainerRect.left;\n    const y = clientY - centerContainerRect.top;\n\n    const item = this.itemSet.itemFromTarget(event);\n    const group = this.itemSet.groupFromTarget(event);\n    const customTime = CustomTime.customTimeFromTarget(event);\n\n    const snap = this.itemSet.options.snap || null;\n    const scale = this.body.util.getScale();\n    const step = this.body.util.getStep();\n    const time = this._toTime(x);\n    const snappedTime = snap ? snap(time, scale, step) : time;\n\n    const element = util.getTarget(event);\n    let what = null;\n    if (item != null) {\n      what = \"item\";\n    } else if (customTime != null) {\n      what = \"custom-time\";\n    } else if (util.hasParent(element, this.timeAxis.dom.foreground)) {\n      what = \"axis\";\n    } else if (\n      this.timeAxis2 &&\n      util.hasParent(element, this.timeAxis2.dom.foreground)\n    ) {\n      what = \"axis\";\n    } else if (util.hasParent(element, this.itemSet.dom.labelSet)) {\n      what = \"group-label\";\n    } else if (util.hasParent(element, this.currentTime.bar)) {\n      what = \"current-time\";\n    } else if (util.hasParent(element, this.dom.center)) {\n      what = \"background\";\n    }\n\n    return {\n      event,\n      item: item ? item.id : null,\n      isCluster: item ? !!item.isCluster : false,\n      items: item ? item.items || [] : null,\n      group: group ? group.groupId : null,\n      customTime: customTime ? customTime.options.id : null,\n      what,\n      pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX,\n      pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY,\n      x,\n      y,\n      time,\n      snappedTime,\n    };\n  }\n\n  /**\n   * Toggle Timeline rolling mode\n   */\n  toggleRollingMode() {\n    if (this.range.rolling) {\n      this.range.stopRolling();\n    } else {\n      if (this.options.rollingMode == undefined) {\n        this.setOptions(this.options);\n      }\n      this.range.startRolling();\n    }\n  }\n\n  /**\n   * redraw\n   * @private\n   */\n  _redraw() {\n    Core.prototype._redraw.call(this);\n  }\n\n  /**\n   * on fit callback\n   * @param {object} args\n   * @private\n   */\n  _onFit(args) {\n    const { start, end, animation } = args;\n    if (!end) {\n      this.moveTo(start.valueOf(), {\n        animation,\n      });\n    } else {\n      this.range.setRange(start, end, {\n        animation: animation,\n      });\n    }\n  }\n}\n\n/**\n *\n * @param {timeline.Item} item\n * @returns {number}\n */\nfunction getStart(item) {\n  return util.convert(item.data.start, \"Date\").valueOf();\n}\n\n/**\n *\n * @param {timeline.Item} item\n * @returns {number}\n */\nfunction getEnd(item) {\n  const end = item.data.end != undefined ? item.data.end : item.data.start;\n  return util.convert(end, \"Date\").valueOf();\n}\n\n/**\n * @param {vis.Timeline} timeline\n * @param {timeline.Item} item\n * @return {{shouldScroll: bool, scrollOffset: number, itemTop: number}}\n */\nfunction getItemVerticalScroll(timeline, item) {\n  if (!item.parent) {\n    // The item no longer exists, so ignore this focus.\n    return false;\n  }\n\n  const itemsetHeight = timeline.options.rtl\n    ? timeline.props.rightContainer.height\n    : timeline.props.leftContainer.height;\n  const contentHeight = timeline.props.center.height;\n\n  const group = item.parent;\n  let offset = group.top;\n  let shouldScroll = true;\n  const orientation = timeline.timeAxis.options.orientation.axis;\n\n  const itemTop = () => {\n    if (orientation == \"bottom\") {\n      return group.height - item.top - item.height;\n    } else {\n      return item.top;\n    }\n  };\n\n  const currentScrollHeight = timeline._getScrollTop() * -1;\n  const targetOffset = offset + itemTop();\n  const height = item.height;\n\n  if (targetOffset < currentScrollHeight) {\n    if (offset + itemsetHeight <= offset + itemTop() + height) {\n      offset += itemTop() - timeline.itemSet.options.margin.item.vertical;\n    }\n  } else if (targetOffset + height > currentScrollHeight + itemsetHeight) {\n    offset +=\n      itemTop() +\n      height -\n      itemsetHeight +\n      timeline.itemSet.options.margin.item.vertical;\n  } else {\n    shouldScroll = false;\n  }\n\n  offset = Math.min(offset, contentHeight - itemsetHeight);\n\n  return { shouldScroll, scrollOffset: offset, itemTop: targetOffset };\n}\n", "/** DataScale */\nclass DataScale {\n  /**\n   *\n   * @param {number} start\n   * @param {number} end\n   * @param {boolean} autoScaleStart\n   * @param {boolean} autoScaleEnd\n   * @param {number} containerHeight\n   * @param {number} majorCharHeight\n   * @param {boolean} zeroAlign\n   * @param {function} formattingFunction\n   * @constructor DataScale\n   */\n  constructor(\n    start,\n    end,\n    autoScaleStart,\n    autoScaleEnd,\n    containerHeight,\n    majorCharHeight,\n    zeroAlign = false,\n    formattingFunction = false,\n  ) {\n    this.majorSteps = [1, 2, 5, 10];\n    this.minorSteps = [0.25, 0.5, 1, 2];\n    this.customLines = null;\n\n    this.containerHeight = containerHeight;\n    this.majorCharHeight = majorCharHeight;\n    this._start = start;\n    this._end = end;\n\n    this.scale = 1;\n    this.minorStepIdx = -1;\n    this.magnitudefactor = 1;\n    this.determineScale();\n\n    this.zeroAlign = zeroAlign;\n    this.autoScaleStart = autoScaleStart;\n    this.autoScaleEnd = autoScaleEnd;\n\n    this.formattingFunction = formattingFunction;\n\n    if (autoScaleStart || autoScaleEnd) {\n      const me = this;\n      const roundToMinor = (value) => {\n        const rounded =\n          value -\n          (value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]));\n        if (\n          value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]) >\n          0.5 * (me.magnitudefactor * me.minorSteps[me.minorStepIdx])\n        ) {\n          return rounded + me.magnitudefactor * me.minorSteps[me.minorStepIdx];\n        } else {\n          return rounded;\n        }\n      };\n      if (autoScaleStart) {\n        this._start -=\n          this.magnitudefactor * 2 * this.minorSteps[this.minorStepIdx];\n        this._start = roundToMinor(this._start);\n      }\n\n      if (autoScaleEnd) {\n        this._end += this.magnitudefactor * this.minorSteps[this.minorStepIdx];\n        this._end = roundToMinor(this._end);\n      }\n      this.determineScale();\n    }\n  }\n\n  /**\n   * set chart height\n   * @param {number} majorCharHeight\n   */\n  setCharHeight(majorCharHeight) {\n    this.majorCharHeight = majorCharHeight;\n  }\n\n  /**\n   * set height\n   * @param {number} containerHeight\n   */\n  setHeight(containerHeight) {\n    this.containerHeight = containerHeight;\n  }\n\n  /**\n   * determine scale\n   */\n  determineScale() {\n    const range = this._end - this._start;\n    this.scale = this.containerHeight / range;\n    const minimumStepValue = this.majorCharHeight / this.scale;\n    const orderOfMagnitude =\n      range > 0 ? Math.round(Math.log(range) / Math.LN10) : 0;\n\n    this.minorStepIdx = -1;\n    this.magnitudefactor = Math.pow(10, orderOfMagnitude);\n\n    let start = 0;\n    if (orderOfMagnitude < 0) {\n      start = orderOfMagnitude;\n    }\n\n    let solutionFound = false;\n    for (let l = start; Math.abs(l) <= Math.abs(orderOfMagnitude); l++) {\n      this.magnitudefactor = Math.pow(10, l);\n      for (let j = 0; j < this.minorSteps.length; j++) {\n        const stepSize = this.magnitudefactor * this.minorSteps[j];\n        if (stepSize >= minimumStepValue) {\n          solutionFound = true;\n          this.minorStepIdx = j;\n          break;\n        }\n      }\n      if (solutionFound === true) {\n        break;\n      }\n    }\n  }\n\n  /**\n   * returns if value is major\n   * @param {number} value\n   * @returns {boolean}\n   */\n  is_major(value) {\n    return (\n      value % (this.magnitudefactor * this.majorSteps[this.minorStepIdx]) === 0\n    );\n  }\n\n  /**\n   * returns step size\n   * @returns {number}\n   */\n  getStep() {\n    return this.magnitudefactor * this.minorSteps[this.minorStepIdx];\n  }\n\n  /**\n   * returns first major\n   * @returns {number}\n   */\n  getFirstMajor() {\n    const majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx];\n    return this.convertValue(\n      this._start + ((majorStep - (this._start % majorStep)) % majorStep),\n    );\n  }\n\n  /**\n   * returns first major\n   * @param {date} current\n   * @returns {date} formatted date\n   */\n  formatValue(current) {\n    let returnValue = current.toPrecision(5);\n    if (typeof this.formattingFunction === \"function\") {\n      returnValue = this.formattingFunction(current);\n    }\n\n    if (typeof returnValue === \"number\") {\n      return `${returnValue}`;\n    } else if (typeof returnValue === \"string\") {\n      return returnValue;\n    } else {\n      return current.toPrecision(5);\n    }\n  }\n\n  /**\n   * returns lines\n   * @returns {object} lines\n   */\n  getLines() {\n    const lines = [];\n    const step = this.getStep();\n    const bottomOffset = (step - (this._start % step)) % step;\n    for (\n      let i = this._start + bottomOffset;\n      this._end - i > 0.00001;\n      i += step\n    ) {\n      if (i != this._start) {\n        //Skip the bottom line\n        lines.push({\n          major: this.is_major(i),\n          y: this.convertValue(i),\n          val: this.formatValue(i),\n        });\n      }\n    }\n    return lines;\n  }\n\n  /**\n   * follow scale\n   * @param {object} other\n   */\n  followScale(other) {\n    const oldStepIdx = this.minorStepIdx;\n    const oldStart = this._start;\n    const oldEnd = this._end;\n\n    const me = this;\n    const increaseMagnitude = () => {\n      me.magnitudefactor *= 2;\n    };\n    const decreaseMagnitude = () => {\n      me.magnitudefactor /= 2;\n    };\n\n    if (\n      (other.minorStepIdx <= 1 && this.minorStepIdx <= 1) ||\n      (other.minorStepIdx > 1 && this.minorStepIdx > 1)\n    ) {\n      //easy, no need to change stepIdx nor multiplication factor\n    } else if (other.minorStepIdx < this.minorStepIdx) {\n      //I'm 5, they are 4 per major.\n      this.minorStepIdx = 1;\n      if (oldStepIdx == 2) {\n        increaseMagnitude();\n      } else {\n        increaseMagnitude();\n        increaseMagnitude();\n      }\n    } else {\n      //I'm 4, they are 5 per major\n      this.minorStepIdx = 2;\n      if (oldStepIdx == 1) {\n        decreaseMagnitude();\n      } else {\n        decreaseMagnitude();\n        decreaseMagnitude();\n      }\n    }\n\n    //Get masters stats:\n    const otherZero = other.convertValue(0);\n    const otherStep = other.getStep() * other.scale;\n\n    let done = false;\n    let count = 0;\n    //Loop until magnitude is correct for given constrains.\n    while (!done && count++ < 5) {\n      //Get my stats:\n      this.scale =\n        otherStep / (this.minorSteps[this.minorStepIdx] * this.magnitudefactor);\n      const newRange = this.containerHeight / this.scale;\n\n      //For the case the magnitudefactor has changed:\n      this._start = oldStart;\n      this._end = this._start + newRange;\n\n      const myOriginalZero = this._end * this.scale;\n      const majorStep =\n        this.magnitudefactor * this.majorSteps[this.minorStepIdx];\n      const majorOffset = this.getFirstMajor() - other.getFirstMajor();\n\n      if (this.zeroAlign) {\n        const zeroOffset = otherZero - myOriginalZero;\n        this._end += zeroOffset / this.scale;\n        this._start = this._end - newRange;\n      } else {\n        if (!this.autoScaleStart) {\n          this._start += majorStep - majorOffset / this.scale;\n          this._end = this._start + newRange;\n        } else {\n          this._start -= majorOffset / this.scale;\n          this._end = this._start + newRange;\n        }\n      }\n      if (!this.autoScaleEnd && this._end > oldEnd + 0.00001) {\n        //Need to decrease magnitude to prevent scale overshoot! (end)\n        decreaseMagnitude();\n        done = false;\n        continue;\n      }\n      if (!this.autoScaleStart && this._start < oldStart - 0.00001) {\n        if (this.zeroAlign && oldStart >= 0) {\n          console.warn(\"Can't adhere to given 'min' range, due to zeroalign\");\n        } else {\n          //Need to decrease magnitude to prevent scale overshoot! (start)\n          decreaseMagnitude();\n          done = false;\n          continue;\n        }\n      }\n      if (\n        this.autoScaleStart &&\n        this.autoScaleEnd &&\n        newRange < oldEnd - oldStart\n      ) {\n        increaseMagnitude();\n        done = false;\n        continue;\n      }\n      done = true;\n    }\n  }\n\n  /**\n   * convert value\n   * @param {number} value\n   * @returns {number}\n   */\n  convertValue(value) {\n    return this.containerHeight - (value - this._start) * this.scale;\n  }\n\n  /**\n   * returns screen to value\n   * @param {number} pixels\n   * @returns {number}\n   */\n  screenToValue(pixels) {\n    return (this.containerHeight - pixels) / this.scale + this._start;\n  }\n}\n\nexport default DataScale;\n", "import util, { randomUUID } from \"../../util.js\";\nimport * as DOMutil from \"../../DOMutil.js\";\nimport Component from \"./Component.js\";\nimport DataScale from \"./DataScale.js\";\n\n/** A horizontal time axis */\nclass DataAxis extends Component {\n  /**\n   * @param {Object} body\n   * @param {Object} [options]        See DataAxis.setOptions for the available\n   *                                  options.\n   * @param {SVGElement} svg\n   * @param {timeline.LineGraph.options} linegraphOptions\n   * @constructor DataAxis\n   * @extends Component\n   */\n  constructor(body, options, svg, linegraphOptions) {\n    super();\n    this.id = randomUUID();\n    this.body = body;\n\n    this.defaultOptions = {\n      orientation: \"left\", // supported: 'left', 'right'\n      showMinorLabels: true,\n      showMajorLabels: true,\n      showWeekScale: false,\n      icons: false,\n      majorLinesOffset: 7,\n      minorLinesOffset: 4,\n      labelOffsetX: 10,\n      labelOffsetY: 2,\n      iconWidth: 20,\n      width: \"40px\",\n      visible: true,\n      alignZeros: true,\n      left: {\n        range: { min: undefined, max: undefined },\n        format(value) {\n          return `${parseFloat(value.toPrecision(3))}`;\n        },\n        title: { text: undefined, style: undefined },\n      },\n      right: {\n        range: { min: undefined, max: undefined },\n        format(value) {\n          return `${parseFloat(value.toPrecision(3))}`;\n        },\n        title: { text: undefined, style: undefined },\n      },\n    };\n\n    this.linegraphOptions = linegraphOptions;\n    this.linegraphSVG = svg;\n    this.props = {};\n    this.DOMelements = {\n      // dynamic elements\n      lines: {},\n      labels: {},\n      title: {},\n    };\n\n    this.dom = {};\n    this.scale = undefined;\n    this.range = { start: 0, end: 0 };\n\n    this.options = util.extend({}, this.defaultOptions);\n    this.conversionFactor = 1;\n\n    this.setOptions(options);\n    this.width = Number(`${this.options.width}`.replace(\"px\", \"\"));\n    this.minWidth = this.width;\n    this.height = this.linegraphSVG.getBoundingClientRect().height;\n    this.hidden = false;\n\n    this.stepPixels = 25;\n    this.zeroCrossing = -1;\n    this.amountOfSteps = -1;\n\n    this.lineOffset = 0;\n    this.master = true;\n    this.masterAxis = null;\n    this.svgElements = {};\n    this.iconsRemoved = false;\n\n    this.groups = {};\n    this.amountOfGroups = 0;\n\n    // create the HTML DOM\n    this._create();\n    if (this.scale == undefined) {\n      this._redrawLabels();\n    }\n    this.framework = {\n      svg: this.svg,\n      svgElements: this.svgElements,\n      options: this.options,\n      groups: this.groups,\n    };\n\n    const me = this;\n    this.body.emitter.on(\"verticalDrag\", () => {\n      me.dom.lineContainer.style.top = `${me.body.domProps.scrollTop}px`;\n    });\n  }\n\n  /**\n   * Adds group to data axis\n   * @param {string} label\n   * @param {object} graphOptions\n   */\n  addGroup(label, graphOptions) {\n    if (!Object.prototype.hasOwnProperty.call(this.groups, label)) {\n      this.groups[label] = graphOptions;\n    }\n    this.amountOfGroups += 1;\n  }\n\n  /**\n   * updates group of data axis\n   * @param {string} label\n   * @param {object} graphOptions\n   */\n  updateGroup(label, graphOptions) {\n    if (!Object.prototype.hasOwnProperty.call(this.groups, label)) {\n      this.amountOfGroups += 1;\n    }\n    this.groups[label] = graphOptions;\n  }\n\n  /**\n   * removes group of data axis\n   * @param {string} label\n   */\n  removeGroup(label) {\n    if (Object.prototype.hasOwnProperty.call(this.groups, label)) {\n      delete this.groups[label];\n      this.amountOfGroups -= 1;\n    }\n  }\n\n  /**\n   * sets options\n   * @param {object} options\n   */\n  setOptions(options) {\n    if (options) {\n      let redraw = false;\n      if (\n        this.options.orientation != options.orientation &&\n        options.orientation !== undefined\n      ) {\n        redraw = true;\n      }\n      const fields = [\n        \"orientation\",\n        \"showMinorLabels\",\n        \"showMajorLabels\",\n        \"icons\",\n        \"majorLinesOffset\",\n        \"minorLinesOffset\",\n        \"labelOffsetX\",\n        \"labelOffsetY\",\n        \"iconWidth\",\n        \"width\",\n        \"visible\",\n        \"left\",\n        \"right\",\n        \"alignZeros\",\n      ];\n      util.selectiveDeepExtend(fields, this.options, options);\n\n      this.minWidth = Number(`${this.options.width}`.replace(\"px\", \"\"));\n      if (redraw === true && this.dom.frame) {\n        this.hide();\n        this.show();\n      }\n    }\n  }\n\n  /**\n   * Create the HTML DOM for the DataAxis\n   */\n  _create() {\n    this.dom.frame = document.createElement(\"div\");\n    this.dom.frame.style.width = this.options.width;\n    this.dom.frame.style.height = this.height;\n\n    this.dom.lineContainer = document.createElement(\"div\");\n    this.dom.lineContainer.style.width = \"100%\";\n    this.dom.lineContainer.style.height = this.height;\n    this.dom.lineContainer.style.position = \"relative\";\n    this.dom.lineContainer.style.visibility = \"visible\";\n    this.dom.lineContainer.style.display = \"block\";\n\n    // create svg element for graph drawing.\n    this.svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    this.svg.style.position = \"absolute\";\n    this.svg.style.top = \"0px\";\n    this.svg.style.height = \"100%\";\n    this.svg.style.width = \"100%\";\n    this.svg.style.display = \"block\";\n    this.dom.frame.appendChild(this.svg);\n  }\n\n  /**\n   * redraws groups icons\n   */\n  _redrawGroupIcons() {\n    DOMutil.prepareElements(this.svgElements);\n\n    let x;\n    const iconWidth = this.options.iconWidth;\n    const iconHeight = 15;\n    const iconOffset = 4;\n    let y = iconOffset + 0.5 * iconHeight;\n\n    if (this.options.orientation === \"left\") {\n      x = iconOffset;\n    } else {\n      x = this.width - iconWidth - iconOffset;\n    }\n\n    const groupArray = Object.keys(this.groups);\n    groupArray.sort((a, b) => (a < b ? -1 : 1));\n\n    for (const groupId of groupArray) {\n      if (\n        this.groups[groupId].visible === true &&\n        (this.linegraphOptions.visibility[groupId] === undefined ||\n          this.linegraphOptions.visibility[groupId] === true)\n      ) {\n        this.groups[groupId].getLegend(\n          iconWidth,\n          iconHeight,\n          this.framework,\n          x,\n          y,\n        );\n        y += iconHeight + iconOffset;\n      }\n    }\n\n    DOMutil.cleanupElements(this.svgElements);\n    this.iconsRemoved = false;\n  }\n\n  /**\n   * Cleans up icons\n   */\n  _cleanupIcons() {\n    if (this.iconsRemoved === false) {\n      DOMutil.prepareElements(this.svgElements);\n      DOMutil.cleanupElements(this.svgElements);\n      this.iconsRemoved = true;\n    }\n  }\n\n  /**\n   * Create the HTML DOM for the DataAxis\n   */\n  show() {\n    this.hidden = false;\n    if (!this.dom.frame.parentNode) {\n      if (this.options.orientation === \"left\") {\n        this.body.dom.left.appendChild(this.dom.frame);\n      } else {\n        this.body.dom.right.appendChild(this.dom.frame);\n      }\n    }\n\n    if (!this.dom.lineContainer.parentNode) {\n      this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer);\n    }\n    this.dom.lineContainer.style.display = \"block\";\n  }\n\n  /**\n   * Create the HTML DOM for the DataAxis\n   */\n  hide() {\n    this.hidden = true;\n    if (this.dom.frame.parentNode) {\n      this.dom.frame.parentNode.removeChild(this.dom.frame);\n    }\n\n    this.dom.lineContainer.style.display = \"none\";\n  }\n\n  /**\n   * Set a range (start and end)\n   * @param {number} start\n   * @param {number} end\n   */\n  setRange(start, end) {\n    this.range.start = start;\n    this.range.end = end;\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    let resized = false;\n    let activeGroups = 0;\n\n    // Make sure the line container adheres to the vertical scrolling.\n    this.dom.lineContainer.style.top = `${this.body.domProps.scrollTop}px`;\n\n    for (const groupId in this.groups) {\n      if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) continue;\n\n      if (\n        this.groups[groupId].visible === true &&\n        (this.linegraphOptions.visibility[groupId] === undefined ||\n          this.linegraphOptions.visibility[groupId] === true)\n      )\n        activeGroups++;\n    }\n    if (this.amountOfGroups === 0 || activeGroups === 0) {\n      this.hide();\n    } else {\n      this.show();\n      this.height = Number(this.linegraphSVG.style.height.replace(\"px\", \"\"));\n\n      // svg offsetheight did not work in firefox and explorer...\n      this.dom.lineContainer.style.height = `${this.height}px`;\n      this.width =\n        this.options.visible === true\n          ? Number(`${this.options.width}`.replace(\"px\", \"\"))\n          : 0;\n\n      const props = this.props;\n      const frame = this.dom.frame;\n\n      // update classname\n      frame.className = \"vis-data-axis\";\n\n      // calculate character width and height\n      this._calculateCharSize();\n\n      const orientation = this.options.orientation;\n      const showMinorLabels = this.options.showMinorLabels;\n      const showMajorLabels = this.options.showMajorLabels;\n\n      const backgroundHorizontalOffsetWidth =\n        this.body.dom.backgroundHorizontal.offsetWidth;\n\n      // determine the width and height of the elements for the axis\n      props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;\n      props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;\n\n      props.minorLineWidth =\n        backgroundHorizontalOffsetWidth -\n        this.lineOffset -\n        this.width +\n        2 * this.options.minorLinesOffset;\n      props.minorLineHeight = 1;\n      props.majorLineWidth =\n        backgroundHorizontalOffsetWidth -\n        this.lineOffset -\n        this.width +\n        2 * this.options.majorLinesOffset;\n      props.majorLineHeight = 1;\n\n      //  take frame offline while updating (is almost twice as fast)\n      if (orientation === \"left\") {\n        frame.style.top = \"0\";\n        frame.style.left = \"0\";\n        frame.style.bottom = \"\";\n        frame.style.width = `${this.width}px`;\n        frame.style.height = `${this.height}px`;\n        this.props.width = this.body.domProps.left.width;\n        this.props.height = this.body.domProps.left.height;\n      } else {\n        // right\n        frame.style.top = \"\";\n        frame.style.bottom = \"0\";\n        frame.style.left = \"0\";\n        frame.style.width = `${this.width}px`;\n        frame.style.height = `${this.height}px`;\n        this.props.width = this.body.domProps.right.width;\n        this.props.height = this.body.domProps.right.height;\n      }\n\n      resized = this._redrawLabels();\n      resized = this._isResized() || resized;\n\n      if (this.options.icons === true) {\n        this._redrawGroupIcons();\n      } else {\n        this._cleanupIcons();\n      }\n\n      this._redrawTitle(orientation);\n    }\n    return resized;\n  }\n\n  /**\n   * Repaint major and minor text labels and vertical grid lines\n   *\n   * @returns {boolean}\n   * @private\n   */\n  _redrawLabels() {\n    let resized = false;\n    DOMutil.prepareElements(this.DOMelements.lines);\n    DOMutil.prepareElements(this.DOMelements.labels);\n    const orientation = this.options[\"orientation\"];\n    const customRange =\n      this.options[orientation].range != undefined\n        ? this.options[orientation].range\n        : {};\n\n    //Override range with manual options:\n    let autoScaleEnd = true;\n    if (customRange.max != undefined) {\n      this.range.end = customRange.max;\n      autoScaleEnd = false;\n    }\n    let autoScaleStart = true;\n    if (customRange.min != undefined) {\n      this.range.start = customRange.min;\n      autoScaleStart = false;\n    }\n\n    this.scale = new DataScale(\n      this.range.start,\n      this.range.end,\n      autoScaleStart,\n      autoScaleEnd,\n      this.dom.frame.offsetHeight,\n      this.props.majorCharHeight,\n      this.options.alignZeros,\n      this.options[orientation].format,\n    );\n\n    if (this.master === false && this.masterAxis != undefined) {\n      this.scale.followScale(this.masterAxis.scale);\n      this.dom.lineContainer.style.display = \"none\";\n    } else {\n      this.dom.lineContainer.style.display = \"block\";\n    }\n\n    //Is updated in side-effect of _redrawLabel():\n    this.maxLabelSize = 0;\n\n    const lines = this.scale.getLines();\n    lines.forEach((line) => {\n      const y = line.y;\n      const isMajor = line.major;\n      if (this.options[\"showMinorLabels\"] && isMajor === false) {\n        this._redrawLabel(\n          y - 2,\n          line.val,\n          orientation,\n          \"vis-y-axis vis-minor\",\n          this.props.minorCharHeight,\n        );\n      }\n      if (isMajor) {\n        if (y >= 0) {\n          this._redrawLabel(\n            y - 2,\n            line.val,\n            orientation,\n            \"vis-y-axis vis-major\",\n            this.props.majorCharHeight,\n          );\n        }\n      }\n      if (this.master === true) {\n        if (isMajor) {\n          this._redrawLine(\n            y,\n            orientation,\n            \"vis-grid vis-horizontal vis-major\",\n            this.options.majorLinesOffset,\n            this.props.majorLineWidth,\n          );\n        } else {\n          this._redrawLine(\n            y,\n            orientation,\n            \"vis-grid vis-horizontal vis-minor\",\n            this.options.minorLinesOffset,\n            this.props.minorLineWidth,\n          );\n        }\n      }\n    });\n\n    // Note that title is rotated, so we're using the height, not width!\n    let titleWidth = 0;\n    if (\n      this.options[orientation].title !== undefined &&\n      this.options[orientation].title.text !== undefined\n    ) {\n      titleWidth = this.props.titleCharHeight;\n    }\n    const offset =\n      this.options.icons === true\n        ? Math.max(this.options.iconWidth, titleWidth) +\n          this.options.labelOffsetX +\n          15\n        : titleWidth + this.options.labelOffsetX + 15;\n\n    // this will resize the yAxis to accommodate the labels.\n    if (\n      this.maxLabelSize > this.width - offset &&\n      this.options.visible === true\n    ) {\n      this.width = this.maxLabelSize + offset;\n      this.options.width = `${this.width}px`;\n      DOMutil.cleanupElements(this.DOMelements.lines);\n      DOMutil.cleanupElements(this.DOMelements.labels);\n      this.redraw();\n      resized = true;\n    }\n    // this will resize the yAxis if it is too big for the labels.\n    else if (\n      this.maxLabelSize < this.width - offset &&\n      this.options.visible === true &&\n      this.width > this.minWidth\n    ) {\n      this.width = Math.max(this.minWidth, this.maxLabelSize + offset);\n      this.options.width = `${this.width}px`;\n      DOMutil.cleanupElements(this.DOMelements.lines);\n      DOMutil.cleanupElements(this.DOMelements.labels);\n      this.redraw();\n      resized = true;\n    } else {\n      DOMutil.cleanupElements(this.DOMelements.lines);\n      DOMutil.cleanupElements(this.DOMelements.labels);\n      resized = false;\n    }\n\n    return resized;\n  }\n\n  /**\n   * converts value\n   * @param {number} value\n   * @returns {number} converted number\n   */\n  convertValue(value) {\n    return this.scale.convertValue(value);\n  }\n\n  /**\n   * converts value\n   * @param {number} x\n   * @returns {number} screen value\n   */\n  screenToValue(x) {\n    return this.scale.screenToValue(x);\n  }\n\n  /**\n   * Create a label for the axis at position x\n   *\n   * @param {number} y\n   * @param {string} text\n   * @param {'top'|'right'|'bottom'|'left'} orientation\n   * @param {string} className\n   * @param {number} characterHeight\n   * @private\n   */\n  _redrawLabel(y, text, orientation, className, characterHeight) {\n    // reuse redundant label\n    const label = DOMutil.getDOMElement(\n      \"div\",\n      this.DOMelements.labels,\n      this.dom.frame,\n    ); //this.dom.redundant.labels.shift();\n    label.className = className;\n    label.innerHTML = util.xss(text);\n    if (orientation === \"left\") {\n      label.style.left = `-${this.options.labelOffsetX}px`;\n      label.style.textAlign = \"right\";\n    } else {\n      label.style.right = `-${this.options.labelOffsetX}px`;\n      label.style.textAlign = \"left\";\n    }\n\n    label.style.top = `${y - 0.5 * characterHeight + this.options.labelOffsetY}px`;\n\n    text += \"\";\n\n    const largestWidth = Math.max(\n      this.props.majorCharWidth,\n      this.props.minorCharWidth,\n    );\n    if (this.maxLabelSize < text.length * largestWidth) {\n      this.maxLabelSize = text.length * largestWidth;\n    }\n  }\n\n  /**\n   * Create a minor line for the axis at position y\n   * @param {number} y\n   * @param {'top'|'right'|'bottom'|'left'} orientation\n   * @param {string} className\n   * @param {number} offset\n   * @param {number} width\n   */\n  _redrawLine(y, orientation, className, offset, width) {\n    if (this.master === true) {\n      const line = DOMutil.getDOMElement(\n        \"div\",\n        this.DOMelements.lines,\n        this.dom.lineContainer,\n      ); //this.dom.redundant.lines.shift();\n      line.className = className;\n      line.innerHTML = \"\";\n\n      if (orientation === \"left\") {\n        line.style.left = `${this.width - offset}px`;\n      } else {\n        line.style.right = `${this.width - offset}px`;\n      }\n\n      line.style.width = `${width}px`;\n      line.style.top = `${y}px`;\n    }\n  }\n\n  /**\n   * Create a title for the axis\n   * @private\n   * @param {'top'|'right'|'bottom'|'left'} orientation\n   */\n  _redrawTitle(orientation) {\n    DOMutil.prepareElements(this.DOMelements.title);\n\n    // Check if the title is defined for this axes\n    if (\n      this.options[orientation].title !== undefined &&\n      this.options[orientation].title.text !== undefined\n    ) {\n      const title = DOMutil.getDOMElement(\n        \"div\",\n        this.DOMelements.title,\n        this.dom.frame,\n      );\n      title.className = `vis-y-axis vis-title vis-${orientation}`;\n      title.innerHTML = util.xss(this.options[orientation].title.text);\n\n      // Add style - if provided\n      if (this.options[orientation].title.style !== undefined) {\n        util.addCssText(title, this.options[orientation].title.style);\n      }\n\n      if (orientation === \"left\") {\n        title.style.left = `${this.props.titleCharHeight}px`;\n      } else {\n        title.style.right = `${this.props.titleCharHeight}px`;\n      }\n\n      title.style.width = `${this.height}px`;\n    }\n\n    // we need to clean up in case we did not use all elements.\n    DOMutil.cleanupElements(this.DOMelements.title);\n  }\n\n  /**\n   * Determine the size of text on the axis (both major and minor axis).\n   * The size is calculated only once and then cached in this.props.\n   * @private\n   */\n  _calculateCharSize() {\n    // determine the char width and height on the minor axis\n    if (!(\"minorCharHeight\" in this.props)) {\n      const textMinor = document.createTextNode(\"0\");\n      const measureCharMinor = document.createElement(\"div\");\n      measureCharMinor.className = \"vis-y-axis vis-minor vis-measure\";\n      measureCharMinor.appendChild(textMinor);\n      this.dom.frame.appendChild(measureCharMinor);\n\n      this.props.minorCharHeight = measureCharMinor.clientHeight;\n      this.props.minorCharWidth = measureCharMinor.clientWidth;\n\n      this.dom.frame.removeChild(measureCharMinor);\n    }\n\n    if (!(\"majorCharHeight\" in this.props)) {\n      const textMajor = document.createTextNode(\"0\");\n      const measureCharMajor = document.createElement(\"div\");\n      measureCharMajor.className = \"vis-y-axis vis-major vis-measure\";\n      measureCharMajor.appendChild(textMajor);\n      this.dom.frame.appendChild(measureCharMajor);\n\n      this.props.majorCharHeight = measureCharMajor.clientHeight;\n      this.props.majorCharWidth = measureCharMajor.clientWidth;\n\n      this.dom.frame.removeChild(measureCharMajor);\n    }\n\n    if (!(\"titleCharHeight\" in this.props)) {\n      const textTitle = document.createTextNode(\"0\");\n      const measureCharTitle = document.createElement(\"div\");\n      measureCharTitle.className = \"vis-y-axis vis-title vis-measure\";\n      measureCharTitle.appendChild(textTitle);\n      this.dom.frame.appendChild(measureCharTitle);\n\n      this.props.titleCharHeight = measureCharTitle.clientHeight;\n      this.props.titleCharWidth = measureCharTitle.clientWidth;\n\n      this.dom.frame.removeChild(measureCharTitle);\n    }\n  }\n}\n\nexport default DataAxis;\n", "import * as DOMutil from \"../../../DOMutil.js\";\n\n/**\n *\n *\n * @constructor Points\n */\nfunction Points() {}\n\n/**\n * draw the data points\n *\n * @param {Array} dataset\n * @param {GraphGroup} group\n * @param {Object} framework            | SVG DOM element\n * @param {number} [offset]\n */\nPoints.draw = function (dataset, group, framework, offset) {\n  offset = offset || 0;\n  var callback = getCallback(framework, group);\n\n  for (var i = 0; i < dataset.length; i++) {\n    if (!callback) {\n      // draw the point the simple way.\n      DOMutil.drawPoint(\n        dataset[i].screen_x + offset,\n        dataset[i].screen_y,\n        getGroupTemplate(group),\n        framework.svgElements,\n        framework.svg,\n        dataset[i].label,\n      );\n    } else {\n      var callbackResult = callback(dataset[i], group); // result might be true, false or an object\n      if (callbackResult === true || typeof callbackResult === \"object\") {\n        DOMutil.drawPoint(\n          dataset[i].screen_x + offset,\n          dataset[i].screen_y,\n          getGroupTemplate(group, callbackResult),\n          framework.svgElements,\n          framework.svg,\n          dataset[i].label,\n        );\n      }\n    }\n  }\n};\n\nPoints.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n  var fillHeight = iconHeight * 0.5;\n\n  var outline = DOMutil.getSVGElement(\n    \"rect\",\n    framework.svgElements,\n    framework.svg,\n  );\n  outline.setAttributeNS(null, \"x\", x);\n  outline.setAttributeNS(null, \"y\", y - fillHeight);\n  outline.setAttributeNS(null, \"width\", iconWidth);\n  outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n  outline.setAttributeNS(null, \"class\", \"vis-outline\");\n\n  //Don't call callback on icon\n  DOMutil.drawPoint(\n    x + 0.5 * iconWidth,\n    y,\n    getGroupTemplate(group),\n    framework.svgElements,\n    framework.svg,\n  );\n};\n\n/**\n *\n * @param {vis.Group} group\n * @param {any} callbackResult\n * @returns {{style: *, styles: (*|string), size: *, className: *}}\n */\nfunction getGroupTemplate(group, callbackResult) {\n  callbackResult = typeof callbackResult === \"undefined\" ? {} : callbackResult;\n  return {\n    style: callbackResult.style || group.options.drawPoints.style,\n    styles: callbackResult.styles || group.options.drawPoints.styles,\n    size: callbackResult.size || group.options.drawPoints.size,\n    className: callbackResult.className || group.className,\n  };\n}\n\n/**\n *\n * @param {Object} framework            | SVG DOM element\n * @param {vis.Group} group\n * @returns {function}\n */\nfunction getCallback(framework, group) {\n  var callback = undefined;\n  // check for the graph2d onRender\n  if (\n    framework.options &&\n    framework.options.drawPoints &&\n    framework.options.drawPoints.onRender &&\n    typeof framework.options.drawPoints.onRender == \"function\"\n  ) {\n    callback = framework.options.drawPoints.onRender;\n  }\n\n  // override it with the group onRender if defined\n  if (\n    group.group.options &&\n    group.group.options.drawPoints &&\n    group.group.options.drawPoints.onRender &&\n    typeof group.group.options.drawPoints.onRender == \"function\"\n  ) {\n    callback = group.group.options.drawPoints.onRender;\n  }\n  return callback;\n}\n\nexport default Points;\n", "import * as DOMutil from \"../../../DOMutil.js\";\nimport Points from \"./points.js\";\n\n/**\n *\n * @constructor Bargraph\n */\nfunction Bargraph() {}\n\nBargraph.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n  var fillHeight = iconHeight * 0.5;\n  var outline = DOMutil.getSVGElement(\n    \"rect\",\n    framework.svgElements,\n    framework.svg,\n  );\n  outline.setAttributeNS(null, \"x\", x);\n  outline.setAttributeNS(null, \"y\", y - fillHeight);\n  outline.setAttributeNS(null, \"width\", iconWidth);\n  outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n  outline.setAttributeNS(null, \"class\", \"vis-outline\");\n\n  var barWidth = Math.round(0.3 * iconWidth);\n  var originalWidth = group.options.barChart.width;\n  var scale = originalWidth / barWidth;\n  var bar1Height = Math.round(0.4 * iconHeight);\n  var bar2Height = Math.round(0.75 * iconHeight);\n\n  var offset = Math.round((iconWidth - 2 * barWidth) / 3);\n\n  DOMutil.drawBar(\n    x + 0.5 * barWidth + offset,\n    y + fillHeight - bar1Height - 1,\n    barWidth,\n    bar1Height,\n    group.className + \" vis-bar\",\n    framework.svgElements,\n    framework.svg,\n    group.style,\n  );\n  DOMutil.drawBar(\n    x + 1.5 * barWidth + offset + 2,\n    y + fillHeight - bar2Height - 1,\n    barWidth,\n    bar2Height,\n    group.className + \" vis-bar\",\n    framework.svgElements,\n    framework.svg,\n    group.style,\n  );\n\n  if (group.options.drawPoints.enabled == true) {\n    var groupTemplate = {\n      style: group.options.drawPoints.style,\n      styles: group.options.drawPoints.styles,\n      size: group.options.drawPoints.size / scale,\n      className: group.className,\n    };\n    DOMutil.drawPoint(\n      x + 0.5 * barWidth + offset,\n      y + fillHeight - bar1Height - 1,\n      groupTemplate,\n      framework.svgElements,\n      framework.svg,\n    );\n    DOMutil.drawPoint(\n      x + 1.5 * barWidth + offset + 2,\n      y + fillHeight - bar2Height - 1,\n      groupTemplate,\n      framework.svgElements,\n      framework.svg,\n    );\n  }\n};\n\n/**\n * draw a bar graph\n *\n * @param {Array.<vis.GraphGroup.id>} groupIds\n * @param {Object} processedGroupData\n * @param {{svg: Object, svgElements: Array.<Object>, options: Object, groups: Array.<vis.Group>}} framework\n */\nBargraph.draw = function (groupIds, processedGroupData, framework) {\n  var combinedData = [];\n  var intersections = {};\n  var coreDistance;\n  var key, drawData;\n  var group;\n  var i, j;\n  var barPoints = 0;\n\n  // combine all barchart data\n  for (i = 0; i < groupIds.length; i++) {\n    group = framework.groups[groupIds[i]];\n    if (group.options.style === \"bar\") {\n      if (\n        group.visible === true &&\n        (framework.options.groups.visibility[groupIds[i]] === undefined ||\n          framework.options.groups.visibility[groupIds[i]] === true)\n      ) {\n        for (j = 0; j < processedGroupData[groupIds[i]].length; j++) {\n          combinedData.push({\n            screen_x: processedGroupData[groupIds[i]][j].screen_x,\n            screen_end: processedGroupData[groupIds[i]][j].screen_end,\n            screen_y: processedGroupData[groupIds[i]][j].screen_y,\n            x: processedGroupData[groupIds[i]][j].x,\n            end: processedGroupData[groupIds[i]][j].end,\n            y: processedGroupData[groupIds[i]][j].y,\n            groupId: groupIds[i],\n            label: processedGroupData[groupIds[i]][j].label,\n          });\n          barPoints += 1;\n        }\n      }\n    }\n  }\n\n  if (barPoints === 0) {\n    return;\n  }\n\n  // sort by time and by group\n  combinedData.sort(function (a, b) {\n    if (a.screen_x === b.screen_x) {\n      return a.groupId < b.groupId ? -1 : 1;\n    } else {\n      return a.screen_x - b.screen_x;\n    }\n  });\n\n  // get intersections\n  Bargraph._getDataIntersections(intersections, combinedData);\n\n  // plot barchart\n  for (i = 0; i < combinedData.length; i++) {\n    group = framework.groups[combinedData[i].groupId];\n    var minWidth =\n      group.options.barChart.minWidth != undefined\n        ? group.options.barChart.minWidth\n        : 0.1 * group.options.barChart.width;\n\n    key = combinedData[i].screen_x;\n    var heightOffset = 0;\n    if (intersections[key] === undefined) {\n      if (i + 1 < combinedData.length) {\n        coreDistance = Math.abs(combinedData[i + 1].screen_x - key);\n      }\n      drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth);\n    } else {\n      var nextKey =\n        i + (intersections[key].amount - intersections[key].resolved);\n      if (nextKey < combinedData.length) {\n        coreDistance = Math.abs(combinedData[nextKey].screen_x - key);\n      }\n      drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth);\n      intersections[key].resolved += 1;\n\n      if (\n        group.options.stack === true &&\n        group.options.excludeFromStacking !== true\n      ) {\n        if (combinedData[i].screen_y < group.zeroPosition) {\n          heightOffset = intersections[key].accumulatedNegative;\n          intersections[key].accumulatedNegative +=\n            group.zeroPosition - combinedData[i].screen_y;\n        } else {\n          heightOffset = intersections[key].accumulatedPositive;\n          intersections[key].accumulatedPositive +=\n            group.zeroPosition - combinedData[i].screen_y;\n        }\n      } else if (group.options.barChart.sideBySide === true) {\n        drawData.width = drawData.width / intersections[key].amount;\n        drawData.offset +=\n          intersections[key].resolved * drawData.width -\n          0.5 * drawData.width * (intersections[key].amount + 1);\n      }\n    }\n\n    let dataWidth = drawData.width;\n    let start = combinedData[i].screen_x;\n\n    // are we drawing explicit boxes? (we supplied an end value)\n    if (combinedData[i].screen_end != undefined) {\n      dataWidth = combinedData[i].screen_end - combinedData[i].screen_x;\n      start += dataWidth * 0.5;\n    } else {\n      start += drawData.offset;\n    }\n\n    DOMutil.drawBar(\n      start,\n      combinedData[i].screen_y - heightOffset,\n      dataWidth,\n      group.zeroPosition - combinedData[i].screen_y,\n      group.className + \" vis-bar\",\n      framework.svgElements,\n      framework.svg,\n      group.style,\n    );\n\n    // draw points\n    if (group.options.drawPoints.enabled === true) {\n      let pointData = {\n        screen_x: combinedData[i].screen_x,\n        screen_y: combinedData[i].screen_y - heightOffset,\n        x: combinedData[i].x,\n        y: combinedData[i].y,\n        groupId: combinedData[i].groupId,\n        label: combinedData[i].label,\n      };\n      Points.draw([pointData], group, framework, drawData.offset);\n      //DOMutil.drawPoint(combinedData[i].x + drawData.offset, combinedData[i].y, group, framework.svgElements, framework.svg);\n    }\n  }\n};\n\n/**\n * Fill the intersections object with counters of how many datapoints share the same x coordinates\n * @param {Object} intersections\n * @param {Array.<Object>} combinedData\n * @private\n */\nBargraph._getDataIntersections = function (intersections, combinedData) {\n  // get intersections\n  var coreDistance;\n  for (var i = 0; i < combinedData.length; i++) {\n    if (i + 1 < combinedData.length) {\n      coreDistance = Math.abs(\n        combinedData[i + 1].screen_x - combinedData[i].screen_x,\n      );\n    }\n    if (i > 0) {\n      coreDistance = Math.min(\n        coreDistance,\n        Math.abs(combinedData[i - 1].screen_x - combinedData[i].screen_x),\n      );\n    }\n    if (coreDistance === 0) {\n      if (intersections[combinedData[i].screen_x] === undefined) {\n        intersections[combinedData[i].screen_x] = {\n          amount: 0,\n          resolved: 0,\n          accumulatedPositive: 0,\n          accumulatedNegative: 0,\n        };\n      }\n      intersections[combinedData[i].screen_x].amount += 1;\n    }\n  }\n};\n\n/**\n * Get the width and offset for bargraphs based on the coredistance between datapoints\n *\n * @param {number} coreDistance\n * @param {vis.Group} group\n * @param {number} minWidth\n * @returns {{width: number, offset: number}}\n * @private\n */\nBargraph._getSafeDrawData = function (coreDistance, group, minWidth) {\n  var width, offset;\n  if (coreDistance < group.options.barChart.width && coreDistance > 0) {\n    width = coreDistance < minWidth ? minWidth : coreDistance;\n\n    offset = 0; // recalculate offset with the new width;\n    if (group.options.barChart.align === \"left\") {\n      offset -= 0.5 * coreDistance;\n    } else if (group.options.barChart.align === \"right\") {\n      offset += 0.5 * coreDistance;\n    }\n  } else {\n    // default settings\n    width = group.options.barChart.width;\n    offset = 0;\n    if (group.options.barChart.align === \"left\") {\n      offset -= 0.5 * group.options.barChart.width;\n    } else if (group.options.barChart.align === \"right\") {\n      offset += 0.5 * group.options.barChart.width;\n    }\n  }\n\n  return { width: width, offset: offset };\n};\n\nBargraph.getStackedYRange = function (\n  combinedData,\n  groupRanges,\n  groupIds,\n  groupLabel,\n  orientation,\n) {\n  if (combinedData.length > 0) {\n    // sort by time and by group\n    combinedData.sort(function (a, b) {\n      if (a.screen_x === b.screen_x) {\n        return a.groupId < b.groupId ? -1 : 1;\n      } else {\n        return a.screen_x - b.screen_x;\n      }\n    });\n    var intersections = {};\n\n    Bargraph._getDataIntersections(intersections, combinedData);\n    groupRanges[groupLabel] = Bargraph._getStackedYRange(\n      intersections,\n      combinedData,\n    );\n    groupRanges[groupLabel].yAxisOrientation = orientation;\n    groupIds.push(groupLabel);\n  }\n};\n\nBargraph._getStackedYRange = function (intersections, combinedData) {\n  var key;\n  var yMin = combinedData[0].screen_y;\n  var yMax = combinedData[0].screen_y;\n  for (var i = 0; i < combinedData.length; i++) {\n    key = combinedData[i].screen_x;\n    if (intersections[key] === undefined) {\n      yMin = yMin > combinedData[i].screen_y ? combinedData[i].screen_y : yMin;\n      yMax = yMax < combinedData[i].screen_y ? combinedData[i].screen_y : yMax;\n    } else {\n      if (combinedData[i].screen_y < 0) {\n        intersections[key].accumulatedNegative += combinedData[i].screen_y;\n      } else {\n        intersections[key].accumulatedPositive += combinedData[i].screen_y;\n      }\n    }\n  }\n  for (var xpos in intersections) {\n    if (!Object.prototype.hasOwnProperty.call(intersections, xpos)) continue;\n\n    yMin =\n      yMin > intersections[xpos].accumulatedNegative\n        ? intersections[xpos].accumulatedNegative\n        : yMin;\n    yMin =\n      yMin > intersections[xpos].accumulatedPositive\n        ? intersections[xpos].accumulatedPositive\n        : yMin;\n    yMax =\n      yMax < intersections[xpos].accumulatedNegative\n        ? intersections[xpos].accumulatedNegative\n        : yMax;\n    yMax =\n      yMax < intersections[xpos].accumulatedPositive\n        ? intersections[xpos].accumulatedPositive\n        : yMax;\n  }\n\n  return { min: yMin, max: yMax };\n};\n\nexport default Bargraph;\n", "import * as DOMutil from \"../../../DOMutil.js\";\n\n/**\n *\n * @constructor Line\n */\nfunction Line() {}\n\nLine.calcPath = function (dataset, group) {\n  if (dataset != null) {\n    if (dataset.length > 0) {\n      var d = [];\n\n      // construct path from dataset\n      if (group.options.interpolation.enabled == true) {\n        d = Line._catmullRom(dataset, group);\n      } else {\n        d = Line._linear(dataset);\n      }\n      return d;\n    }\n  }\n};\n\nLine.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n  var fillHeight = iconHeight * 0.5;\n  var path, fillPath;\n\n  var outline = DOMutil.getSVGElement(\n    \"rect\",\n    framework.svgElements,\n    framework.svg,\n  );\n  outline.setAttributeNS(null, \"x\", x);\n  outline.setAttributeNS(null, \"y\", y - fillHeight);\n  outline.setAttributeNS(null, \"width\", iconWidth);\n  outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n  outline.setAttributeNS(null, \"class\", \"vis-outline\");\n\n  path = DOMutil.getSVGElement(\"path\", framework.svgElements, framework.svg);\n  path.setAttributeNS(null, \"class\", group.className);\n  if (group.style !== undefined) {\n    path.setAttributeNS(null, \"style\", group.style);\n  }\n\n  path.setAttributeNS(\n    null,\n    \"d\",\n    \"M\" + x + \",\" + y + \" L\" + (x + iconWidth) + \",\" + y + \"\",\n  );\n  if (group.options.shaded.enabled == true) {\n    fillPath = DOMutil.getSVGElement(\n      \"path\",\n      framework.svgElements,\n      framework.svg,\n    );\n    if (group.options.shaded.orientation == \"top\") {\n      fillPath.setAttributeNS(\n        null,\n        \"d\",\n        \"M\" +\n          x +\n          \", \" +\n          (y - fillHeight) +\n          \"L\" +\n          x +\n          \",\" +\n          y +\n          \" L\" +\n          (x + iconWidth) +\n          \",\" +\n          y +\n          \" L\" +\n          (x + iconWidth) +\n          \",\" +\n          (y - fillHeight),\n      );\n    } else {\n      fillPath.setAttributeNS(\n        null,\n        \"d\",\n        \"M\" +\n          x +\n          \",\" +\n          y +\n          \" \" +\n          \"L\" +\n          x +\n          \",\" +\n          (y + fillHeight) +\n          \" \" +\n          \"L\" +\n          (x + iconWidth) +\n          \",\" +\n          (y + fillHeight) +\n          \"L\" +\n          (x + iconWidth) +\n          \",\" +\n          y,\n      );\n    }\n    fillPath.setAttributeNS(null, \"class\", group.className + \" vis-icon-fill\");\n    if (\n      group.options.shaded.style !== undefined &&\n      group.options.shaded.style !== \"\"\n    ) {\n      fillPath.setAttributeNS(null, \"style\", group.options.shaded.style);\n    }\n  }\n\n  if (group.options.drawPoints.enabled == true) {\n    var groupTemplate = {\n      style: group.options.drawPoints.style,\n      styles: group.options.drawPoints.styles,\n      size: group.options.drawPoints.size,\n      className: group.className,\n    };\n    DOMutil.drawPoint(\n      x + 0.5 * iconWidth,\n      y,\n      groupTemplate,\n      framework.svgElements,\n      framework.svg,\n    );\n  }\n};\n\nLine.drawShading = function (pathArray, group, subPathArray, framework) {\n  // append shading to the path\n  if (group.options.shaded.enabled == true) {\n    var svgHeight = Number(framework.svg.style.height.replace(\"px\", \"\"));\n    var fillPath = DOMutil.getSVGElement(\n      \"path\",\n      framework.svgElements,\n      framework.svg,\n    );\n    var type = \"L\";\n    if (group.options.interpolation.enabled == true) {\n      type = \"C\";\n    }\n    var dFill;\n    var zero = 0;\n    if (group.options.shaded.orientation == \"top\") {\n      zero = 0;\n    } else if (group.options.shaded.orientation == \"bottom\") {\n      zero = svgHeight;\n    } else {\n      zero = Math.min(Math.max(0, group.zeroPosition), svgHeight);\n    }\n    if (\n      group.options.shaded.orientation == \"group\" &&\n      subPathArray != null &&\n      subPathArray != undefined\n    ) {\n      dFill =\n        \"M\" +\n        pathArray[0][0] +\n        \",\" +\n        pathArray[0][1] +\n        \" \" +\n        this.serializePath(pathArray, type, false) +\n        \" L\" +\n        subPathArray[subPathArray.length - 1][0] +\n        \",\" +\n        subPathArray[subPathArray.length - 1][1] +\n        \" \" +\n        this.serializePath(subPathArray, type, true) +\n        subPathArray[0][0] +\n        \",\" +\n        subPathArray[0][1] +\n        \" Z\";\n    } else {\n      dFill =\n        \"M\" +\n        pathArray[0][0] +\n        \",\" +\n        pathArray[0][1] +\n        \" \" +\n        this.serializePath(pathArray, type, false) +\n        \" V\" +\n        zero +\n        \" H\" +\n        pathArray[0][0] +\n        \" Z\";\n    }\n\n    fillPath.setAttributeNS(null, \"class\", group.className + \" vis-fill\");\n    if (group.options.shaded.style !== undefined) {\n      fillPath.setAttributeNS(null, \"style\", group.options.shaded.style);\n    }\n    fillPath.setAttributeNS(null, \"d\", dFill);\n  }\n};\n\n/**\n * draw a line graph\n *\n * @param {Array.<Object>} pathArray\n * @param {vis.Group} group\n * @param {{svg: Object, svgElements: Array.<Object>, options: Object, groups: Array.<vis.Group>}} framework\n */\nLine.draw = function (pathArray, group, framework) {\n  if (pathArray != null && pathArray != undefined) {\n    var path = DOMutil.getSVGElement(\n      \"path\",\n      framework.svgElements,\n      framework.svg,\n    );\n    path.setAttributeNS(null, \"class\", group.className);\n    if (group.style !== undefined) {\n      path.setAttributeNS(null, \"style\", group.style);\n    }\n\n    var type = \"L\";\n    if (group.options.interpolation.enabled == true) {\n      type = \"C\";\n    }\n    // copy properties to path for drawing.\n    path.setAttributeNS(\n      null,\n      \"d\",\n      \"M\" +\n        pathArray[0][0] +\n        \",\" +\n        pathArray[0][1] +\n        \" \" +\n        this.serializePath(pathArray, type, false),\n    );\n  }\n};\n\nLine.serializePath = function (pathArray, type, inverse) {\n  if (pathArray.length < 2) {\n    //Too little data to create a path.\n    return \"\";\n  }\n  var d = type;\n  var i;\n  if (inverse) {\n    for (i = pathArray.length - 2; i > 0; i--) {\n      d += pathArray[i][0] + \",\" + pathArray[i][1] + \" \";\n    }\n  } else {\n    for (i = 1; i < pathArray.length; i++) {\n      d += pathArray[i][0] + \",\" + pathArray[i][1] + \" \";\n    }\n  }\n  return d;\n};\n\n/**\n * This uses an uniform parametrization of the interpolation algorithm:\n * 'On the Parameterization of Catmull-Rom Curves' by Cem Yuksel et al.\n * @param {Array.<Object>} data\n * @returns {string}\n * @private\n */\nLine._catmullRomUniform = function (data) {\n  // catmull rom\n  var p0, p1, p2, p3, bp1, bp2;\n  var d = [];\n  d.push([Math.round(data[0].screen_x), Math.round(data[0].screen_y)]);\n  var normalization = 1 / 6;\n  var length = data.length;\n  for (var i = 0; i < length - 1; i++) {\n    p0 = i == 0 ? data[0] : data[i - 1];\n    p1 = data[i];\n    p2 = data[i + 1];\n    p3 = i + 2 < length ? data[i + 2] : p2;\n\n    // Catmull-Rom to Cubic Bezier conversion matrix\n    //    0       1       0       0\n    //  -1/6      1      1/6      0\n    //    0      1/6      1     -1/6\n    //    0       0       1       0\n\n    //    bp0 = { x: p1.x,                               y: p1.y };\n    bp1 = {\n      screen_x: (-p0.screen_x + 6 * p1.screen_x + p2.screen_x) * normalization,\n      screen_y: (-p0.screen_y + 6 * p1.screen_y + p2.screen_y) * normalization,\n    };\n    bp2 = {\n      screen_x: (p1.screen_x + 6 * p2.screen_x - p3.screen_x) * normalization,\n      screen_y: (p1.screen_y + 6 * p2.screen_y - p3.screen_y) * normalization,\n    };\n    //    bp0 = { x: p2.x,                               y: p2.y };\n\n    d.push([bp1.screen_x, bp1.screen_y]);\n    d.push([bp2.screen_x, bp2.screen_y]);\n    d.push([p2.screen_x, p2.screen_y]);\n  }\n\n  return d;\n};\n\n/**\n * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm.\n * By default, the centripetal parameterization is used because this gives the nicest results.\n * These parameterizations are relatively heavy because the distance between 4 points have to be calculated.\n *\n * One optimization can be used to reuse distances since this is a sliding window approach.\n * @param {Array.<Object>} data\n * @param {vis.GraphGroup} group\n * @returns {string}\n * @private\n */\nLine._catmullRom = function (data, group) {\n  var alpha = group.options.interpolation.alpha;\n  if (alpha == 0 || alpha === undefined) {\n    return this._catmullRomUniform(data);\n  } else {\n    var p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;\n    var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;\n    var d = [];\n    d.push([Math.round(data[0].screen_x), Math.round(data[0].screen_y)]);\n    var length = data.length;\n    for (var i = 0; i < length - 1; i++) {\n      p0 = i == 0 ? data[0] : data[i - 1];\n      p1 = data[i];\n      p2 = data[i + 1];\n      p3 = i + 2 < length ? data[i + 2] : p2;\n\n      d1 = Math.sqrt(\n        Math.pow(p0.screen_x - p1.screen_x, 2) +\n          Math.pow(p0.screen_y - p1.screen_y, 2),\n      );\n      d2 = Math.sqrt(\n        Math.pow(p1.screen_x - p2.screen_x, 2) +\n          Math.pow(p1.screen_y - p2.screen_y, 2),\n      );\n      d3 = Math.sqrt(\n        Math.pow(p2.screen_x - p3.screen_x, 2) +\n          Math.pow(p2.screen_y - p3.screen_y, 2),\n      );\n\n      // Catmull-Rom to Cubic Bezier conversion matrix\n\n      // A = 2d1^2a + 3d1^a * d2^a + d3^2a\n      // B = 2d3^2a + 3d3^a * d2^a + d2^2a\n\n      // [   0             1            0          0          ]\n      // [   -d2^2a /N     A/N          d1^2a /N   0          ]\n      // [   0             d3^2a /M     B/M        -d2^2a /M  ]\n      // [   0             0            1          0          ]\n\n      d3powA = Math.pow(d3, alpha);\n      d3pow2A = Math.pow(d3, 2 * alpha);\n      d2powA = Math.pow(d2, alpha);\n      d2pow2A = Math.pow(d2, 2 * alpha);\n      d1powA = Math.pow(d1, alpha);\n      d1pow2A = Math.pow(d1, 2 * alpha);\n\n      A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;\n      B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;\n      N = 3 * d1powA * (d1powA + d2powA);\n      if (N > 0) {\n        N = 1 / N;\n      }\n      M = 3 * d3powA * (d3powA + d2powA);\n      if (M > 0) {\n        M = 1 / M;\n      }\n\n      bp1 = {\n        screen_x:\n          (-d2pow2A * p0.screen_x + A * p1.screen_x + d1pow2A * p2.screen_x) *\n          N,\n        screen_y:\n          (-d2pow2A * p0.screen_y + A * p1.screen_y + d1pow2A * p2.screen_y) *\n          N,\n      };\n\n      bp2 = {\n        screen_x:\n          (d3pow2A * p1.screen_x + B * p2.screen_x - d2pow2A * p3.screen_x) * M,\n        screen_y:\n          (d3pow2A * p1.screen_y + B * p2.screen_y - d2pow2A * p3.screen_y) * M,\n      };\n\n      if (bp1.screen_x == 0 && bp1.screen_y == 0) {\n        bp1 = p1;\n      }\n      if (bp2.screen_x == 0 && bp2.screen_y == 0) {\n        bp2 = p2;\n      }\n      d.push([bp1.screen_x, bp1.screen_y]);\n      d.push([bp2.screen_x, bp2.screen_y]);\n      d.push([p2.screen_x, p2.screen_y]);\n    }\n\n    return d;\n  }\n};\n\n/**\n * this generates the SVG path for a linear drawing between datapoints.\n * @param {Array.<Object>} data\n * @returns {string}\n * @private\n */\nLine._linear = function (data) {\n  // linear\n  var d = [];\n  for (var i = 0; i < data.length; i++) {\n    d.push([data[i].screen_x, data[i].screen_y]);\n  }\n  return d;\n};\n\nexport default Line;\n", "import util from \"../../util.js\";\nimport Bars from \"./graph2d_types/bar.js\";\nimport Lines from \"./graph2d_types/line.js\";\nimport Points from \"./graph2d_types/points.js\";\n\n/**\n * /**\n * @param {object} group            | the object of the group from the dataset\n * @param {string} groupId          | ID of the group\n * @param {object} options          | the default options\n * @param {array} groupsUsingDefaultStyles  | this array has one entree.\n *                                            It is passed as an array so it is passed by reference.\n *                                            It enumerates through the default styles\n * @constructor GraphGroup\n */\nfunction GraphGroup(group, groupId, options, groupsUsingDefaultStyles) {\n  this.id = groupId;\n  var fields = [\n    \"sampling\",\n    \"style\",\n    \"sort\",\n    \"yAxisOrientation\",\n    \"barChart\",\n    \"drawPoints\",\n    \"shaded\",\n    \"interpolation\",\n    \"zIndex\",\n    \"excludeFromStacking\",\n    \"excludeFromLegend\",\n  ];\n  this.options = util.selectiveBridgeObject(fields, options);\n  this.usingDefaultStyle = group.className === undefined;\n  this.groupsUsingDefaultStyles = groupsUsingDefaultStyles;\n  this.zeroPosition = 0;\n  this.update(group);\n  if (this.usingDefaultStyle == true) {\n    this.groupsUsingDefaultStyles[0] += 1;\n  }\n  this.itemsData = [];\n  this.visible = group.visible === undefined ? true : group.visible;\n}\n\n/**\n * this loads a reference to all items in this group into this group.\n * @param {array} items\n */\nGraphGroup.prototype.setItems = function (items) {\n  if (items != null) {\n    this.itemsData = items;\n    if (this.options.sort == true) {\n      util.insertSort(this.itemsData, function (a, b) {\n        return a.x > b.x ? 1 : -1;\n      });\n    }\n  } else {\n    this.itemsData = [];\n  }\n};\n\nGraphGroup.prototype.getItems = function () {\n  return this.itemsData;\n};\n\n/**\n * this is used for barcharts and shading, this way, we only have to calculate it once.\n * @param {number} pos\n */\nGraphGroup.prototype.setZeroPosition = function (pos) {\n  this.zeroPosition = pos;\n};\n\n/**\n * set the options of the graph group over the default options.\n * @param {Object} options\n */\nGraphGroup.prototype.setOptions = function (options) {\n  if (options !== undefined) {\n    var fields = [\n      \"sampling\",\n      \"style\",\n      \"sort\",\n      \"yAxisOrientation\",\n      \"barChart\",\n      \"zIndex\",\n      \"excludeFromStacking\",\n      \"excludeFromLegend\",\n    ];\n    util.selectiveDeepExtend(fields, this.options, options);\n\n    // if the group's drawPoints is a function delegate the callback to the onRender property\n    if (typeof options.drawPoints == \"function\") {\n      options.drawPoints = {\n        onRender: options.drawPoints,\n      };\n    }\n\n    util.mergeOptions(this.options, options, \"interpolation\");\n    util.mergeOptions(this.options, options, \"drawPoints\");\n    util.mergeOptions(this.options, options, \"shaded\");\n\n    if (options.interpolation) {\n      if (typeof options.interpolation == \"object\") {\n        if (options.interpolation.parametrization) {\n          if (options.interpolation.parametrization == \"uniform\") {\n            this.options.interpolation.alpha = 0;\n          } else if (options.interpolation.parametrization == \"chordal\") {\n            this.options.interpolation.alpha = 1.0;\n          } else {\n            this.options.interpolation.parametrization = \"centripetal\";\n            this.options.interpolation.alpha = 0.5;\n          }\n        }\n      }\n    }\n  }\n};\n\n/**\n * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph\n * @param {vis.Group} group\n */\nGraphGroup.prototype.update = function (group) {\n  this.group = group;\n  this.content = group.content || \"graph\";\n  this.className =\n    group.className ||\n    this.className ||\n    \"vis-graph-group\" + (this.groupsUsingDefaultStyles[0] % 10);\n  this.visible = group.visible === undefined ? true : group.visible;\n  this.style = group.style;\n  this.setOptions(group.options);\n};\n\n/**\n * return the legend entree for this group.\n *\n * @param {number} iconWidth\n * @param {number} iconHeight\n * @param {{svg: (*|Element), svgElements: Object, options: Object, groups: Array.<Object>}} framework\n * @param {number} x\n * @param {number} y\n * @returns {{icon: (*|Element), label: (*|string), orientation: *}}\n */\nGraphGroup.prototype.getLegend = function (\n  iconWidth,\n  iconHeight,\n  framework,\n  x,\n  y,\n) {\n  if (framework == undefined || framework == null) {\n    var svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    framework = {\n      svg: svg,\n      svgElements: {},\n      options: this.options,\n      groups: [this],\n    };\n  }\n  if (x == undefined || x == null) {\n    x = 0;\n  }\n  if (y == undefined || y == null) {\n    y = 0.5 * iconHeight;\n  }\n  switch (this.options.style) {\n    case \"line\":\n      Lines.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n    case \"points\": //explicit no break\n    case \"point\":\n      Points.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n    case \"bar\":\n      Bars.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n  }\n  return {\n    icon: framework.svg,\n    label: this.content,\n    orientation: this.options.yAxisOrientation,\n  };\n};\n\nGraphGroup.prototype.getYRange = function (groupData) {\n  var yMin = groupData[0].y;\n  var yMax = groupData[0].y;\n  for (var j = 0; j < groupData.length; j++) {\n    yMin = yMin > groupData[j].y ? groupData[j].y : yMin;\n    yMax = yMax < groupData[j].y ? groupData[j].y : yMax;\n  }\n  return {\n    min: yMin,\n    max: yMax,\n    yAxisOrientation: this.options.yAxisOrientation,\n  };\n};\n\nexport default GraphGroup;\n", "import util from \"../../util.js\";\nimport * as DOMutil from \"../../DOMutil.js\";\nimport Component from \"./Component.js\";\n\n/**\n * Legend for Graph2d\n *\n * @param {vis.Graph2d.body} body\n * @param {vis.Graph2d.options} options\n * @param {number} side\n * @param {vis.LineGraph.options} linegraphOptions\n * @constructor Legend\n * @extends Component\n */\nfunction Legend(body, options, side, linegraphOptions) {\n  this.body = body;\n  this.defaultOptions = {\n    enabled: false,\n    icons: true,\n    iconSize: 20,\n    iconSpacing: 6,\n    left: {\n      visible: true,\n      position: \"top-left\", // top/bottom - left,center,right\n    },\n    right: {\n      visible: true,\n      position: \"top-right\", // top/bottom - left,center,right\n    },\n  };\n\n  this.side = side;\n  this.options = util.extend({}, this.defaultOptions);\n  this.linegraphOptions = linegraphOptions;\n\n  this.svgElements = {};\n  this.dom = {};\n  this.groups = {};\n  this.amountOfGroups = 0;\n  this._create();\n  this.framework = {\n    svg: this.svg,\n    svgElements: this.svgElements,\n    options: this.options,\n    groups: this.groups,\n  };\n\n  this.setOptions(options);\n}\n\nLegend.prototype = new Component();\n\nLegend.prototype.clear = function () {\n  this.groups = {};\n  this.amountOfGroups = 0;\n};\n\nLegend.prototype.addGroup = function (label, graphOptions) {\n  // Include a group only if the group option 'excludeFromLegend: false' is not set.\n  if (graphOptions.options.excludeFromLegend != true) {\n    if (!Object.prototype.hasOwnProperty.call(this.groups, label)) {\n      this.groups[label] = graphOptions;\n    }\n    this.amountOfGroups += 1;\n  }\n};\n\nLegend.prototype.updateGroup = function (label, graphOptions) {\n  this.groups[label] = graphOptions;\n};\n\nLegend.prototype.removeGroup = function (label) {\n  if (Object.prototype.hasOwnProperty.call(this.groups, label)) {\n    delete this.groups[label];\n    this.amountOfGroups -= 1;\n  }\n};\n\nLegend.prototype._create = function () {\n  this.dom.frame = document.createElement(\"div\");\n  this.dom.frame.className = \"vis-legend\";\n  this.dom.frame.style.position = \"absolute\";\n  this.dom.frame.style.top = \"10px\";\n  this.dom.frame.style.display = \"block\";\n\n  this.dom.textArea = document.createElement(\"div\");\n  this.dom.textArea.className = \"vis-legend-text\";\n  this.dom.textArea.style.position = \"relative\";\n  this.dom.textArea.style.top = \"0px\";\n\n  this.svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n  this.svg.style.position = \"absolute\";\n  this.svg.style.top = 0 + \"px\";\n  this.svg.style.width = this.options.iconSize + 5 + \"px\";\n  this.svg.style.height = \"100%\";\n\n  this.dom.frame.appendChild(this.svg);\n  this.dom.frame.appendChild(this.dom.textArea);\n};\n\n/**\n * Hide the component from the DOM\n */\nLegend.prototype.hide = function () {\n  // remove the frame containing the items\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n};\n\n/**\n * Show the component in the DOM (when not already visible).\n */\nLegend.prototype.show = function () {\n  // show frame containing the items\n  if (!this.dom.frame.parentNode) {\n    this.body.dom.center.appendChild(this.dom.frame);\n  }\n};\n\nLegend.prototype.setOptions = function (options) {\n  var fields = [\"enabled\", \"orientation\", \"icons\", \"left\", \"right\"];\n  util.selectiveDeepExtend(fields, this.options, options);\n};\n\nLegend.prototype.redraw = function () {\n  var activeGroups = 0;\n  var groupArray = Object.keys(this.groups);\n  groupArray.sort(function (a, b) {\n    return a < b ? -1 : 1;\n  });\n\n  for (var i = 0; i < groupArray.length; i++) {\n    var groupId = groupArray[i];\n    if (\n      this.groups[groupId].visible == true &&\n      (this.linegraphOptions.visibility[groupId] === undefined ||\n        this.linegraphOptions.visibility[groupId] == true)\n    ) {\n      activeGroups++;\n    }\n  }\n\n  if (\n    this.options[this.side].visible == false ||\n    this.amountOfGroups == 0 ||\n    this.options.enabled == false ||\n    activeGroups == 0\n  ) {\n    this.hide();\n  } else {\n    this.show();\n    if (\n      this.options[this.side].position == \"top-left\" ||\n      this.options[this.side].position == \"bottom-left\"\n    ) {\n      this.dom.frame.style.left = \"4px\";\n      this.dom.frame.style.textAlign = \"left\";\n      this.dom.textArea.style.textAlign = \"left\";\n      this.dom.textArea.style.left = this.options.iconSize + 15 + \"px\";\n      this.dom.textArea.style.right = \"\";\n      this.svg.style.left = 0 + \"px\";\n      this.svg.style.right = \"\";\n    } else {\n      this.dom.frame.style.right = \"4px\";\n      this.dom.frame.style.textAlign = \"right\";\n      this.dom.textArea.style.textAlign = \"right\";\n      this.dom.textArea.style.right = this.options.iconSize + 15 + \"px\";\n      this.dom.textArea.style.left = \"\";\n      this.svg.style.right = 0 + \"px\";\n      this.svg.style.left = \"\";\n    }\n\n    if (\n      this.options[this.side].position == \"top-left\" ||\n      this.options[this.side].position == \"top-right\"\n    ) {\n      this.dom.frame.style.top =\n        4 - Number(this.body.dom.center.style.top.replace(\"px\", \"\")) + \"px\";\n      this.dom.frame.style.bottom = \"\";\n    } else {\n      var scrollableHeight =\n        this.body.domProps.center.height -\n        this.body.domProps.centerContainer.height;\n      this.dom.frame.style.bottom =\n        4 +\n        scrollableHeight +\n        Number(this.body.dom.center.style.top.replace(\"px\", \"\")) +\n        \"px\";\n      this.dom.frame.style.top = \"\";\n    }\n\n    if (this.options.icons == false) {\n      this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + \"px\";\n      this.dom.textArea.style.right = \"\";\n      this.dom.textArea.style.left = \"\";\n      this.svg.style.width = \"0px\";\n    } else {\n      this.dom.frame.style.width =\n        this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + \"px\";\n      this.drawLegendIcons();\n    }\n\n    var content = \"\";\n    for (i = 0; i < groupArray.length; i++) {\n      groupId = groupArray[i];\n      if (\n        this.groups[groupId].visible == true &&\n        (this.linegraphOptions.visibility[groupId] === undefined ||\n          this.linegraphOptions.visibility[groupId] == true)\n      ) {\n        content += this.groups[groupId].content + \"<br />\";\n      }\n    }\n    this.dom.textArea.innerHTML = util.xss(content);\n    this.dom.textArea.style.lineHeight =\n      0.75 * this.options.iconSize + this.options.iconSpacing + \"px\";\n  }\n};\n\nLegend.prototype.drawLegendIcons = function () {\n  if (this.dom.frame.parentNode) {\n    var groupArray = Object.keys(this.groups);\n    groupArray.sort(function (a, b) {\n      return a < b ? -1 : 1;\n    });\n\n    // this resets the elements so the order is maintained\n    DOMutil.resetElements(this.svgElements);\n\n    var padding = window.getComputedStyle(this.dom.frame).paddingTop;\n    var iconOffset = Number(padding.replace(\"px\", \"\"));\n    var x = iconOffset;\n    var iconWidth = this.options.iconSize;\n    var iconHeight = 0.75 * this.options.iconSize;\n    var y = iconOffset + 0.5 * iconHeight + 3;\n\n    this.svg.style.width = iconWidth + 5 + iconOffset + \"px\";\n\n    for (var i = 0; i < groupArray.length; i++) {\n      var groupId = groupArray[i];\n      if (\n        this.groups[groupId].visible == true &&\n        (this.linegraphOptions.visibility[groupId] === undefined ||\n          this.linegraphOptions.visibility[groupId] == true)\n      ) {\n        this.groups[groupId].getLegend(\n          iconWidth,\n          iconHeight,\n          this.framework,\n          x,\n          y,\n        );\n        y += iconHeight + this.options.iconSpacing;\n      }\n    }\n  }\n};\n\nexport default Legend;\n", "import util, {\n  typeCoerceDataSet,\n  randomUUID,\n  isDataViewLike,\n} from \"../../util.js\";\nimport * as DOMutil from \"../../DOMutil.js\";\nimport Component from \"./Component.js\";\nimport DataAxis from \"./DataAxis.js\";\nimport GraphGroup from \"./GraphGroup.js\";\nimport Legend from \"./Legend.js\";\nimport Bars from \"./graph2d_types/bar.js\";\nimport Lines from \"./graph2d_types/line.js\";\nimport Points from \"./graph2d_types/points.js\";\n\nvar UNGROUPED = \"__ungrouped__\"; // reserved group id for ungrouped items\n\n/**\n * This is the constructor of the LineGraph. It requires a Timeline body and options.\n *\n * @param {vis.Timeline.body} body\n * @param {Object} options\n * @constructor LineGraph\n * @extends Component\n */\nfunction LineGraph(body, options) {\n  this.id = randomUUID();\n  this.body = body;\n\n  this.defaultOptions = {\n    yAxisOrientation: \"left\",\n    defaultGroup: \"default\",\n    sort: true,\n    sampling: true,\n    stack: false,\n    graphHeight: \"400px\",\n    shaded: {\n      enabled: false,\n      orientation: \"bottom\", // top, bottom, zero\n    },\n    style: \"line\", // line, bar\n    barChart: {\n      width: 50,\n      sideBySide: false,\n      align: \"center\", // left, center, right\n    },\n    interpolation: {\n      enabled: true,\n      parametrization: \"centripetal\", // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n      alpha: 0.5,\n    },\n    drawPoints: {\n      enabled: true,\n      size: 6,\n      style: \"square\", // square, circle\n    },\n    dataAxis: {}, //Defaults are done on DataAxis level\n    legend: {}, //Defaults are done on Legend level\n    groups: {\n      visibility: {},\n    },\n  };\n\n  // options is shared by this lineGraph and all its items\n  this.options = util.extend({}, this.defaultOptions);\n  this.dom = {};\n  this.props = {};\n  this.hammer = null;\n  this.groups = {};\n  this.abortedGraphUpdate = false;\n  this.updateSVGheight = false;\n  this.updateSVGheightOnResize = false;\n  this.forceGraphUpdate = true;\n\n  var me = this;\n  this.itemsData = null; // DataSet\n  this.groupsData = null; // DataSet\n\n  // listeners for the DataSet of the items\n  this.itemListeners = {\n    add: function (_event, params) {\n      me._onAdd(params.items);\n    },\n    update: function (_event, params) {\n      me._onUpdate(params.items);\n    },\n    remove: function (_event, params) {\n      me._onRemove(params.items);\n    },\n  };\n\n  // listeners for the DataSet of the groups\n  this.groupListeners = {\n    add: function (_event, params) {\n      me._onAddGroups(params.items);\n    },\n    update: function (_event, params) {\n      me._onUpdateGroups(params.items);\n    },\n    remove: function (_event, params) {\n      me._onRemoveGroups(params.items);\n    },\n  };\n\n  this.items = {}; // object with an Item for every data item\n  this.selection = []; // list with the ids of all selected nodes\n  this.lastStart = this.body.range.start;\n  this.touchParams = {}; // stores properties while dragging\n\n  this.svgElements = {};\n  this.setOptions(options);\n  this.groupsUsingDefaultStyles = [0];\n  this.body.emitter.on(\"rangechanged\", function () {\n    me.svg.style.left = util.option.asSize(-me.props.width);\n\n    me.forceGraphUpdate = true;\n    //Is this local redraw necessary? (Core also does a change event!)\n    me.redraw.call(me);\n  });\n\n  // create the HTML DOM\n  this._create();\n  this.framework = {\n    svg: this.svg,\n    svgElements: this.svgElements,\n    options: this.options,\n    groups: this.groups,\n  };\n}\n\nLineGraph.prototype = new Component();\n\n/**\n * Create the HTML DOM for the ItemSet\n */\nLineGraph.prototype._create = function () {\n  var frame = document.createElement(\"div\");\n  frame.className = \"vis-line-graph\";\n  this.dom.frame = frame;\n\n  // create svg element for graph drawing.\n  this.svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n  this.svg.style.position = \"relative\";\n  this.svg.style.height =\n    (\"\" + this.options.graphHeight).replace(\"px\", \"\") + \"px\";\n  this.svg.style.display = \"block\";\n  frame.appendChild(this.svg);\n\n  // data axis\n  this.options.dataAxis.orientation = \"left\";\n  this.yAxisLeft = new DataAxis(\n    this.body,\n    this.options.dataAxis,\n    this.svg,\n    this.options.groups,\n  );\n\n  this.options.dataAxis.orientation = \"right\";\n  this.yAxisRight = new DataAxis(\n    this.body,\n    this.options.dataAxis,\n    this.svg,\n    this.options.groups,\n  );\n  delete this.options.dataAxis.orientation;\n\n  // legends\n  this.legendLeft = new Legend(\n    this.body,\n    this.options.legend,\n    \"left\",\n    this.options.groups,\n  );\n  this.legendRight = new Legend(\n    this.body,\n    this.options.legend,\n    \"right\",\n    this.options.groups,\n  );\n\n  this.show();\n};\n\n/**\n * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element.\n * @param {object} options\n */\nLineGraph.prototype.setOptions = function (options) {\n  if (options) {\n    var fields = [\n      \"sampling\",\n      \"defaultGroup\",\n      \"stack\",\n      \"height\",\n      \"graphHeight\",\n      \"yAxisOrientation\",\n      \"style\",\n      \"barChart\",\n      \"dataAxis\",\n      \"sort\",\n      \"groups\",\n    ];\n    if (options.graphHeight === undefined && options.height !== undefined) {\n      this.updateSVGheight = true;\n      this.updateSVGheightOnResize = true;\n    } else if (\n      this.body.domProps.centerContainer.height !== undefined &&\n      options.graphHeight !== undefined\n    ) {\n      if (\n        parseInt((options.graphHeight + \"\").replace(\"px\", \"\")) <\n        this.body.domProps.centerContainer.height\n      ) {\n        this.updateSVGheight = true;\n      }\n    }\n    util.selectiveDeepExtend(fields, this.options, options);\n    util.mergeOptions(this.options, options, \"interpolation\");\n    util.mergeOptions(this.options, options, \"drawPoints\");\n    util.mergeOptions(this.options, options, \"shaded\");\n    util.mergeOptions(this.options, options, \"legend\");\n\n    if (options.interpolation) {\n      if (typeof options.interpolation == \"object\") {\n        if (options.interpolation.parametrization) {\n          if (options.interpolation.parametrization == \"uniform\") {\n            this.options.interpolation.alpha = 0;\n          } else if (options.interpolation.parametrization == \"chordal\") {\n            this.options.interpolation.alpha = 1.0;\n          } else {\n            this.options.interpolation.parametrization = \"centripetal\";\n            this.options.interpolation.alpha = 0.5;\n          }\n        }\n      }\n    }\n\n    if (this.yAxisLeft) {\n      if (options.dataAxis !== undefined) {\n        this.yAxisLeft.setOptions(this.options.dataAxis);\n        this.yAxisRight.setOptions(this.options.dataAxis);\n      }\n    }\n\n    if (this.legendLeft) {\n      if (options.legend !== undefined) {\n        this.legendLeft.setOptions(this.options.legend);\n        this.legendRight.setOptions(this.options.legend);\n      }\n    }\n\n    if (Object.prototype.hasOwnProperty.call(this.groups, UNGROUPED)) {\n      this.groups[UNGROUPED].setOptions(options);\n    }\n  }\n\n  // this is used to redraw the graph if the visibility of the groups is changed.\n  if (this.dom.frame) {\n    //not on initial run?\n    this.forceGraphUpdate = true;\n    this.body.emitter.emit(\"_change\", { queue: true });\n  }\n};\n\n/**\n * Hide the component from the DOM\n */\nLineGraph.prototype.hide = function () {\n  // remove the frame containing the items\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n};\n\n/**\n * Show the component in the DOM (when not already visible).\n */\nLineGraph.prototype.show = function () {\n  // show frame containing the items\n  if (!this.dom.frame.parentNode) {\n    this.body.dom.center.appendChild(this.dom.frame);\n  }\n};\n\n/**\n * Set items\n * @param {vis.DataSet | null} items\n */\nLineGraph.prototype.setItems = function (items) {\n  var me = this,\n    ids,\n    oldItemsData = this.itemsData;\n\n  // replace the dataset\n  if (!items) {\n    this.itemsData = null;\n  } else if (isDataViewLike(items)) {\n    this.itemsData = typeCoerceDataSet(items);\n  } else {\n    throw new TypeError(\n      \"Data must implement the interface of DataSet or DataView\",\n    );\n  }\n\n  if (oldItemsData) {\n    // unsubscribe from old dataset\n    util.forEach(this.itemListeners, function (callback, event) {\n      oldItemsData.off(event, callback);\n    });\n\n    // stop maintaining a coerced version of the old data set\n    oldItemsData.dispose();\n\n    // remove all drawn items\n    ids = oldItemsData.getIds();\n    this._onRemove(ids);\n  }\n\n  if (this.itemsData) {\n    // subscribe to new dataset\n    var id = this.id;\n    util.forEach(this.itemListeners, function (callback, event) {\n      me.itemsData.on(event, callback, id);\n    });\n\n    // add all new items\n    ids = this.itemsData.getIds();\n    this._onAdd(ids);\n  }\n};\n\n/**\n * Set groups\n * @param {vis.DataSet} groups\n */\nLineGraph.prototype.setGroups = function (groups) {\n  var me = this;\n  var ids;\n\n  // unsubscribe from current dataset\n  if (this.groupsData) {\n    util.forEach(this.groupListeners, function (callback, event) {\n      me.groupsData.off(event, callback);\n    });\n\n    // remove all drawn groups\n    ids = this.groupsData.getIds();\n    this.groupsData = null;\n    for (var i = 0; i < ids.length; i++) {\n      this._removeGroup(ids[i]);\n    }\n  }\n\n  // replace the dataset\n  if (!groups) {\n    this.groupsData = null;\n  } else if (isDataViewLike(groups)) {\n    this.groupsData = groups;\n  } else {\n    throw new TypeError(\n      \"Data must implement the interface of DataSet or DataView\",\n    );\n  }\n\n  if (this.groupsData) {\n    // subscribe to new dataset\n    var id = this.id;\n    util.forEach(this.groupListeners, function (callback, event) {\n      me.groupsData.on(event, callback, id);\n    });\n\n    // draw all ms\n    ids = this.groupsData.getIds();\n    this._onAddGroups(ids);\n  }\n};\n\nLineGraph.prototype._onUpdate = function (ids) {\n  this._updateAllGroupData(ids);\n};\nLineGraph.prototype._onAdd = function (ids) {\n  this._onUpdate(ids);\n};\nLineGraph.prototype._onRemove = function (ids) {\n  this._onUpdate(ids);\n};\nLineGraph.prototype._onUpdateGroups = function (groupIds) {\n  this._updateAllGroupData(null, groupIds);\n};\nLineGraph.prototype._onAddGroups = function (groupIds) {\n  this._onUpdateGroups(groupIds);\n};\n\n/**\n * this cleans the group out off the legends and the dataaxis, updates the ungrouped and updates the graph\n * @param {Array} groupIds\n * @private\n */\nLineGraph.prototype._onRemoveGroups = function (groupIds) {\n  for (var i = 0; i < groupIds.length; i++) {\n    this._removeGroup(groupIds[i]);\n  }\n  this.forceGraphUpdate = true;\n  this.body.emitter.emit(\"_change\", { queue: true });\n};\n\n/**\n * this cleans the group out off the legends and the dataaxis\n * @param {vis.GraphGroup.id} groupId\n * @private\n */\nLineGraph.prototype._removeGroup = function (groupId) {\n  if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) return;\n\n  if (this.groups[groupId].options.yAxisOrientation == \"right\") {\n    this.yAxisRight.removeGroup(groupId);\n    this.legendRight.removeGroup(groupId);\n    this.legendRight.redraw();\n  } else {\n    this.yAxisLeft.removeGroup(groupId);\n    this.legendLeft.removeGroup(groupId);\n    this.legendLeft.redraw();\n  }\n  delete this.groups[groupId];\n};\n\n/**\n * update a group object with the group dataset entree\n *\n * @param {vis.GraphGroup} group\n * @param {vis.GraphGroup.id} groupId\n * @private\n */\nLineGraph.prototype._updateGroup = function (group, groupId) {\n  if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) {\n    this.groups[groupId] = new GraphGroup(\n      group,\n      groupId,\n      this.options,\n      this.groupsUsingDefaultStyles,\n    );\n    if (this.groups[groupId].options.yAxisOrientation == \"right\") {\n      this.yAxisRight.addGroup(groupId, this.groups[groupId]);\n      this.legendRight.addGroup(groupId, this.groups[groupId]);\n    } else {\n      this.yAxisLeft.addGroup(groupId, this.groups[groupId]);\n      this.legendLeft.addGroup(groupId, this.groups[groupId]);\n    }\n  } else {\n    this.groups[groupId].update(group);\n    if (this.groups[groupId].options.yAxisOrientation == \"right\") {\n      this.yAxisRight.updateGroup(groupId, this.groups[groupId]);\n      this.legendRight.updateGroup(groupId, this.groups[groupId]);\n      //If yAxisOrientation changed, clean out the group from the other axis.\n      this.yAxisLeft.removeGroup(groupId);\n      this.legendLeft.removeGroup(groupId);\n    } else {\n      this.yAxisLeft.updateGroup(groupId, this.groups[groupId]);\n      this.legendLeft.updateGroup(groupId, this.groups[groupId]);\n      //If yAxisOrientation changed, clean out the group from the other axis.\n      this.yAxisRight.removeGroup(groupId);\n      this.legendRight.removeGroup(groupId);\n    }\n  }\n  this.legendLeft.redraw();\n  this.legendRight.redraw();\n};\n\n/**\n * this updates all groups, it is used when there is an update the the itemset.\n *\n * @param  {Array} ids\n * @param  {Array} groupIds\n * @private\n */\nLineGraph.prototype._updateAllGroupData = function (ids, groupIds) {\n  if (this.itemsData != null) {\n    var groupsContent = {};\n    var items = this.itemsData.get();\n    var fieldId = this.itemsData.idProp;\n    var idMap = {};\n    if (ids) {\n      ids.map(function (id) {\n        idMap[id] = id;\n      });\n    }\n\n    //pre-Determine array sizes, for more efficient memory claim\n    var groupCounts = {};\n    for (var i = 0; i < items.length; i++) {\n      var item = items[i];\n      var groupId = item.group;\n      if (groupId === null || groupId === undefined) {\n        groupId = UNGROUPED;\n      }\n      Object.prototype.hasOwnProperty.call(groupCounts, groupId)\n        ? groupCounts[groupId]++\n        : (groupCounts[groupId] = 1);\n    }\n\n    //Pre-load arrays from existing groups if items are not changed (not in ids)\n    var existingItemsMap = {};\n    if (!groupIds && ids) {\n      for (groupId in this.groups) {\n        if (!Object.prototype.hasOwnProperty.call(this.groups, groupId))\n          continue;\n\n        group = this.groups[groupId];\n        var existing_items = group.getItems();\n\n        groupsContent[groupId] = existing_items.filter(function (item) {\n          existingItemsMap[item[fieldId]] = item[fieldId];\n          return item[fieldId] !== idMap[item[fieldId]];\n        });\n\n        var newLength = groupCounts[groupId];\n        groupCounts[groupId] -= groupsContent[groupId].length;\n\n        if (groupsContent[groupId].length < newLength)\n          groupsContent[groupId][newLength - 1] = {};\n      }\n    }\n\n    //Now insert data into the arrays.\n    for (i = 0; i < items.length; i++) {\n      item = items[i];\n      groupId = item.group;\n      if (groupId === null || groupId === undefined) {\n        groupId = UNGROUPED;\n      }\n      if (\n        !groupIds &&\n        ids &&\n        item[fieldId] !== idMap[item[fieldId]] &&\n        Object.prototype.hasOwnProperty.call(existingItemsMap, item[fieldId])\n      ) {\n        continue;\n      }\n      if (!Object.prototype.hasOwnProperty.call(groupsContent, groupId)) {\n        groupsContent[groupId] = new Array(groupCounts[groupId]);\n      }\n      //Copy data (because of unmodifiable DataView input.\n      var extended = util.bridgeObject(item);\n      extended.x = util.convert(item.x, \"Date\");\n      extended.end = util.convert(item.end, \"Date\");\n      extended.orginalY = item.y; //real Y\n      extended.y = Number(item.y);\n      extended[fieldId] = item[fieldId];\n\n      var index = groupsContent[groupId].length - groupCounts[groupId]--;\n      groupsContent[groupId][index] = extended;\n    }\n\n    //Make sure all groups are present, to allow removal of old groups\n    for (groupId in this.groups) {\n      if (\n        !Object.prototype.hasOwnProperty.call(this.groups, groupId) ||\n        Object.prototype.hasOwnProperty.call(groupsContent, groupId)\n      )\n        continue;\n      groupsContent[groupId] = new Array(0);\n    }\n\n    //Update legendas, style and axis\n    for (groupId in groupsContent) {\n      if (!Object.prototype.hasOwnProperty.call(groupsContent, groupId))\n        continue;\n\n      if (groupsContent[groupId].length == 0) {\n        if (Object.prototype.hasOwnProperty.call(this.groups, groupId)) {\n          this._removeGroup(groupId);\n        }\n      } else {\n        var group = undefined;\n        if (this.groupsData != undefined) {\n          group = this.groupsData.get(groupId);\n        }\n        if (group == undefined) {\n          group = { id: groupId, content: this.options.defaultGroup + groupId };\n        }\n        this._updateGroup(group, groupId);\n        this.groups[groupId].setItems(groupsContent[groupId]);\n      }\n    }\n    this.forceGraphUpdate = true;\n    this.body.emitter.emit(\"_change\", { queue: true });\n  }\n};\n\n/**\n * Redraw the component, mandatory function\n * @return {boolean} Returns true if the component is resized\n */\nLineGraph.prototype.redraw = function () {\n  var resized = false;\n\n  // calculate actual size and position\n  this.props.width = this.dom.frame.offsetWidth;\n  this.props.height =\n    this.body.domProps.centerContainer.height -\n    this.body.domProps.border.top -\n    this.body.domProps.border.bottom;\n\n  // check if this component is resized\n  resized = this._isResized() || resized;\n\n  // check whether zoomed (in that case we need to re-stack everything)\n  var visibleInterval = this.body.range.end - this.body.range.start;\n  var zoomed = visibleInterval != this.lastVisibleInterval;\n  this.lastVisibleInterval = visibleInterval;\n\n  // the svg element is three times as big as the width, this allows for fully dragging left and right\n  // without reloading the graph. the controls for this are bound to events in the constructor\n  if (resized == true) {\n    this.svg.style.width = util.option.asSize(3 * this.props.width);\n    this.svg.style.left = util.option.asSize(-this.props.width);\n\n    // if the height of the graph is set as proportional, change the height of the svg\n    if (\n      (this.options.height + \"\").indexOf(\"%\") != -1 ||\n      this.updateSVGheightOnResize == true\n    ) {\n      this.updateSVGheight = true;\n    }\n  }\n\n  // update the height of the graph on each redraw of the graph.\n  if (this.updateSVGheight == true) {\n    if (this.options.graphHeight != this.props.height + \"px\") {\n      this.options.graphHeight = this.props.height + \"px\";\n      this.svg.style.height = this.props.height + \"px\";\n    }\n    this.updateSVGheight = false;\n  } else {\n    this.svg.style.height =\n      (\"\" + this.options.graphHeight).replace(\"px\", \"\") + \"px\";\n  }\n\n  // zoomed is here to ensure that animations are shown correctly.\n  if (\n    resized == true ||\n    zoomed == true ||\n    this.abortedGraphUpdate == true ||\n    this.forceGraphUpdate == true\n  ) {\n    resized = this._updateGraph() || resized;\n    this.forceGraphUpdate = false;\n    this.lastStart = this.body.range.start;\n    this.svg.style.left = -this.props.width + \"px\";\n  } else {\n    // move the whole svg while dragging\n    if (this.lastStart != 0) {\n      var offset = this.body.range.start - this.lastStart;\n      var range = this.body.range.end - this.body.range.start;\n      if (this.props.width != 0) {\n        var rangePerPixelInv = this.props.width / range;\n        var xOffset = offset * rangePerPixelInv;\n        this.svg.style.left = -this.props.width - xOffset + \"px\";\n      }\n    }\n  }\n  this.legendLeft.redraw();\n  this.legendRight.redraw();\n  return resized;\n};\n\nLineGraph.prototype._getSortedGroupIds = function () {\n  // getting group Ids\n  var grouplist = [];\n  for (var groupId in this.groups) {\n    if (Object.prototype.hasOwnProperty.call(this.groups, groupId)) {\n      var group = this.groups[groupId];\n      if (\n        group.visible == true &&\n        (this.options.groups.visibility[groupId] === undefined ||\n          this.options.groups.visibility[groupId] == true)\n      ) {\n        grouplist.push({ id: groupId, zIndex: group.options.zIndex });\n      }\n    }\n  }\n  util.insertSort(grouplist, function (a, b) {\n    var az = a.zIndex;\n    var bz = b.zIndex;\n    if (az === undefined) az = 0;\n    if (bz === undefined) bz = 0;\n    return az == bz ? 0 : az < bz ? -1 : 1;\n  });\n  var groupIds = new Array(grouplist.length);\n  for (var i = 0; i < grouplist.length; i++) {\n    groupIds[i] = grouplist[i].id;\n  }\n  return groupIds;\n};\n\n/**\n * Update and redraw the graph.\n *\n * @returns {boolean}\n * @private\n */\nLineGraph.prototype._updateGraph = function () {\n  // reset the svg elements\n  DOMutil.prepareElements(this.svgElements);\n  if (this.props.width != 0 && this.itemsData != null) {\n    var group, i;\n    var groupRanges = {};\n    var changeCalled = false;\n    // this is the range of the SVG canvas\n    var minDate = this.body.util.toGlobalTime(-this.body.domProps.root.width);\n    var maxDate = this.body.util.toGlobalTime(\n      2 * this.body.domProps.root.width,\n    );\n\n    // getting group Ids\n    var groupIds = this._getSortedGroupIds();\n    if (groupIds.length > 0) {\n      var groupsData = {};\n\n      // fill groups data, this only loads the data we require based on the timewindow\n      this._getRelevantData(groupIds, groupsData, minDate, maxDate);\n\n      // apply sampling, if disabled, it will pass through this function.\n      this._applySampling(groupIds, groupsData);\n\n      // we transform the X coordinates to detect collisions\n      for (i = 0; i < groupIds.length; i++) {\n        this._convertXcoordinates(groupsData[groupIds[i]]);\n      }\n\n      // now all needed data has been collected we start the processing.\n      this._getYRanges(groupIds, groupsData, groupRanges);\n\n      // update the Y axis first, we use this data to draw at the correct Y points\n      changeCalled = this._updateYAxis(groupIds, groupRanges);\n\n      //  at changeCalled, abort this update cycle as the graph needs another update with new Width input from the Redraw container.\n      //  Cleanup SVG elements on abort.\n      if (changeCalled == true) {\n        DOMutil.cleanupElements(this.svgElements);\n        this.abortedGraphUpdate = true;\n        return true;\n      }\n      this.abortedGraphUpdate = false;\n\n      // With the yAxis scaled correctly, use this to get the Y values of the points.\n      var below = undefined;\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (this.options.stack === true && this.options.style === \"line\") {\n          if (\n            group.options.excludeFromStacking == undefined ||\n            !group.options.excludeFromStacking\n          ) {\n            if (below != undefined) {\n              this._stack(groupsData[group.id], groupsData[below.id]);\n              if (\n                group.options.shaded.enabled == true &&\n                group.options.shaded.orientation !== \"group\"\n              ) {\n                if (\n                  group.options.shaded.orientation == \"top\" &&\n                  below.options.shaded.orientation !== \"group\"\n                ) {\n                  below.options.shaded.orientation = \"group\";\n                  below.options.shaded.groupId = group.id;\n                } else {\n                  group.options.shaded.orientation = \"group\";\n                  group.options.shaded.groupId = below.id;\n                }\n              }\n            }\n            below = group;\n          }\n        }\n        this._convertYcoordinates(groupsData[groupIds[i]], group);\n      }\n\n      //Precalculate paths and draw shading if appropriate. This will make sure the shading is always behind any lines.\n      var paths = {};\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (\n          group.options.style === \"line\" &&\n          group.options.shaded.enabled == true\n        ) {\n          var dataset = groupsData[groupIds[i]];\n          if (dataset == null || dataset.length == 0) {\n            continue;\n          }\n          if (!Object.prototype.hasOwnProperty.call(paths, groupIds[i])) {\n            paths[groupIds[i]] = Lines.calcPath(dataset, group);\n          }\n          if (group.options.shaded.orientation === \"group\") {\n            var subGroupId = group.options.shaded.groupId;\n            if (groupIds.indexOf(subGroupId) === -1) {\n              console.log(\n                group.id + \": Unknown shading group target given:\" + subGroupId,\n              );\n              continue;\n            }\n            if (!Object.prototype.hasOwnProperty.call(paths, subGroupId)) {\n              paths[subGroupId] = Lines.calcPath(\n                groupsData[subGroupId],\n                this.groups[subGroupId],\n              );\n            }\n            Lines.drawShading(\n              paths[groupIds[i]],\n              group,\n              paths[subGroupId],\n              this.framework,\n            );\n          } else {\n            Lines.drawShading(\n              paths[groupIds[i]],\n              group,\n              undefined,\n              this.framework,\n            );\n          }\n        }\n      }\n\n      // draw the groups, calculating paths if still necessary.\n      Bars.draw(groupIds, groupsData, this.framework);\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (groupsData[groupIds[i]].length > 0) {\n          switch (group.options.style) {\n            case \"line\":\n              if (!Object.prototype.hasOwnProperty.call(paths, groupIds[i])) {\n                paths[groupIds[i]] = Lines.calcPath(\n                  groupsData[groupIds[i]],\n                  group,\n                );\n              }\n              Lines.draw(paths[groupIds[i]], group, this.framework);\n\n            // eslint-disable-next-line no-fallthrough\n            case \"point\":\n            // eslint-disable-next-line no-fallthrough\n            case \"points\":\n              if (\n                group.options.style == \"point\" ||\n                group.options.style == \"points\" ||\n                group.options.drawPoints.enabled == true\n              ) {\n                Points.draw(groupsData[groupIds[i]], group, this.framework);\n              }\n              break;\n            case \"bar\":\n            // bar needs to be drawn enmasse\n            // eslint-disable-next-line no-fallthrough\n            default:\n            //do nothing...\n          }\n        }\n      }\n    }\n  }\n\n  // cleanup unused svg elements\n  DOMutil.cleanupElements(this.svgElements);\n  return false;\n};\n\nLineGraph.prototype._stack = function (data, subData) {\n  var index, dx, dy, subPrevPoint, subNextPoint;\n  index = 0;\n  // for each data point we look for a matching on in the set below\n  for (var j = 0; j < data.length; j++) {\n    subPrevPoint = undefined;\n    subNextPoint = undefined;\n    // we look for time matches or a before-after point\n    for (var k = index; k < subData.length; k++) {\n      // if times match exactly\n      if (subData[k].x === data[j].x) {\n        subPrevPoint = subData[k];\n        subNextPoint = subData[k];\n        index = k;\n        break;\n      } else if (subData[k].x > data[j].x) {\n        // overshoot\n        subNextPoint = subData[k];\n        if (k == 0) {\n          subPrevPoint = subNextPoint;\n        } else {\n          subPrevPoint = subData[k - 1];\n        }\n        index = k;\n        break;\n      }\n    }\n    // in case the last data point has been used, we assume it stays like this.\n    if (subNextPoint === undefined) {\n      subPrevPoint = subData[subData.length - 1];\n      subNextPoint = subData[subData.length - 1];\n    }\n    // linear interpolation\n    dx = subNextPoint.x - subPrevPoint.x;\n    dy = subNextPoint.y - subPrevPoint.y;\n    if (dx == 0) {\n      data[j].y = data[j].orginalY + subNextPoint.y;\n    } else {\n      data[j].y =\n        data[j].orginalY +\n        (dy / dx) * (data[j].x - subPrevPoint.x) +\n        subPrevPoint.y; // ax + b where b is data[j].y\n    }\n  }\n};\n\n/**\n * first select and preprocess the data from the datasets.\n * the groups have their preselection of data, we now loop over this data to see\n * what data we need to draw. Sorted data is much faster.\n * more optimization is possible by doing the sampling before and using the binary search\n * to find the end date to determine the increment.\n *\n * @param {array}  groupIds\n * @param {object} groupsData\n * @param {date}   minDate\n * @param {date}   maxDate\n * @private\n */\nLineGraph.prototype._getRelevantData = function (\n  groupIds,\n  groupsData,\n  minDate,\n  maxDate,\n) {\n  var group, i, j, item;\n  if (groupIds.length > 0) {\n    for (i = 0; i < groupIds.length; i++) {\n      group = this.groups[groupIds[i]];\n      var itemsData = group.getItems();\n      // optimization for sorted data\n      if (group.options.sort == true) {\n        var dateComparator = function (a, b) {\n          return a.getTime() == b.getTime() ? 0 : a < b ? -1 : 1;\n        };\n        var first = Math.max(\n          0,\n          util.binarySearchValue(\n            itemsData,\n            minDate,\n            \"x\",\n            \"before\",\n            dateComparator,\n          ),\n        );\n        var last = Math.min(\n          itemsData.length,\n          util.binarySearchValue(\n            itemsData,\n            maxDate,\n            \"x\",\n            \"after\",\n            dateComparator,\n          ) + 1,\n        );\n        if (last <= 0) {\n          last = itemsData.length;\n        }\n        var dataContainer = new Array(last - first);\n        for (j = first; j < last; j++) {\n          item = group.itemsData[j];\n          dataContainer[j - first] = item;\n        }\n        groupsData[groupIds[i]] = dataContainer;\n      } else {\n        // If unsorted data, all data is relevant, just returning entire structure\n        groupsData[groupIds[i]] = group.itemsData;\n      }\n    }\n  }\n};\n\n/**\n *\n * @param {Array.<vis.GraphGroup.id>} groupIds\n * @param {vis.DataSet} groupsData\n * @private\n */\nLineGraph.prototype._applySampling = function (groupIds, groupsData) {\n  var group;\n  if (groupIds.length > 0) {\n    for (var i = 0; i < groupIds.length; i++) {\n      group = this.groups[groupIds[i]];\n      if (group.options.sampling == true) {\n        var dataContainer = groupsData[groupIds[i]];\n        if (dataContainer.length > 0) {\n          var increment = 1;\n          var amountOfPoints = dataContainer.length;\n\n          // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop\n          // of width changing of the yAxis.\n          //TODO: This assumes sorted data, but that's not guaranteed!\n          var xDistance =\n            this.body.util.toGlobalScreen(\n              dataContainer[dataContainer.length - 1].x,\n            ) - this.body.util.toGlobalScreen(dataContainer[0].x);\n          var pointsPerPixel = amountOfPoints / xDistance;\n          increment = Math.min(\n            Math.ceil(0.2 * amountOfPoints),\n            Math.max(1, Math.round(pointsPerPixel)),\n          );\n\n          var sampledData = new Array(amountOfPoints);\n          for (var j = 0; j < amountOfPoints; j += increment) {\n            var idx = Math.round(j / increment);\n            sampledData[idx] = dataContainer[j];\n          }\n          groupsData[groupIds[i]] = sampledData.splice(\n            0,\n            Math.round(amountOfPoints / increment),\n          );\n        }\n      }\n    }\n  }\n};\n\n/**\n *\n * @param {Array.<vis.GraphGroup.id>} groupIds\n * @param {vis.DataSet} groupsData\n * @param {object} groupRanges  | this is being filled here\n * @private\n */\nLineGraph.prototype._getYRanges = function (groupIds, groupsData, groupRanges) {\n  var groupData, group, i;\n  var combinedDataLeft = [];\n  var combinedDataRight = [];\n  var options;\n  if (groupIds.length > 0) {\n    for (i = 0; i < groupIds.length; i++) {\n      groupData = groupsData[groupIds[i]];\n      options = this.groups[groupIds[i]].options;\n      if (groupData.length > 0) {\n        group = this.groups[groupIds[i]];\n        // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups.\n        if (options.stack === true && options.style === \"bar\") {\n          if (options.yAxisOrientation === \"left\") {\n            combinedDataLeft = combinedDataLeft.concat(groupData);\n          } else {\n            combinedDataRight = combinedDataRight.concat(groupData);\n          }\n        } else {\n          groupRanges[groupIds[i]] = group.getYRange(groupData, groupIds[i]);\n        }\n      }\n    }\n\n    // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups.\n    Bars.getStackedYRange(\n      combinedDataLeft,\n      groupRanges,\n      groupIds,\n      \"__barStackLeft\",\n      \"left\",\n    );\n    Bars.getStackedYRange(\n      combinedDataRight,\n      groupRanges,\n      groupIds,\n      \"__barStackRight\",\n      \"right\",\n    );\n  }\n};\n\n/**\n * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden.\n * @param {Array.<vis.GraphGroup.id>} groupIds\n * @param {Object} groupRanges\n * @returns {boolean} resized\n * @private\n */\nLineGraph.prototype._updateYAxis = function (groupIds, groupRanges) {\n  var resized = false;\n  var yAxisLeftUsed = false;\n  var yAxisRightUsed = false;\n  var minLeft = 1e9,\n    minRight = 1e9,\n    maxLeft = -1e9,\n    maxRight = -1e9,\n    minVal,\n    maxVal;\n  // if groups are present\n  if (groupIds.length > 0) {\n    // this is here to make sure that if there are no items in the axis but there are groups, that there is no infinite draw/redraw loop.\n    for (var i = 0; i < groupIds.length; i++) {\n      var group = this.groups[groupIds[i]];\n      if (group && group.options.yAxisOrientation != \"right\") {\n        yAxisLeftUsed = true;\n        minLeft = 1e9;\n        maxLeft = -1e9;\n      } else if (group && group.options.yAxisOrientation) {\n        yAxisRightUsed = true;\n        minRight = 1e9;\n        maxRight = -1e9;\n      }\n    }\n\n    // if there are items:\n    for (i = 0; i < groupIds.length; i++) {\n      if (\n        !Object.prototype.hasOwnProperty.call(groupRanges, groupIds[i]) ||\n        groupRanges[groupIds[i]].ignore === true\n      )\n        continue;\n\n      minVal = groupRanges[groupIds[i]].min;\n      maxVal = groupRanges[groupIds[i]].max;\n\n      if (groupRanges[groupIds[i]].yAxisOrientation != \"right\") {\n        yAxisLeftUsed = true;\n        minLeft = minLeft > minVal ? minVal : minLeft;\n        maxLeft = maxLeft < maxVal ? maxVal : maxLeft;\n      } else {\n        yAxisRightUsed = true;\n        minRight = minRight > minVal ? minVal : minRight;\n        maxRight = maxRight < maxVal ? maxVal : maxRight;\n      }\n    }\n\n    if (yAxisLeftUsed == true) {\n      this.yAxisLeft.setRange(minLeft, maxLeft);\n    }\n    if (yAxisRightUsed == true) {\n      this.yAxisRight.setRange(minRight, maxRight);\n    }\n  }\n  resized = this._toggleAxisVisiblity(yAxisLeftUsed, this.yAxisLeft) || resized;\n  resized =\n    this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || resized;\n\n  if (yAxisRightUsed == true && yAxisLeftUsed == true) {\n    this.yAxisLeft.drawIcons = true;\n    this.yAxisRight.drawIcons = true;\n  } else {\n    this.yAxisLeft.drawIcons = false;\n    this.yAxisRight.drawIcons = false;\n  }\n  this.yAxisRight.master = !yAxisLeftUsed;\n  this.yAxisRight.masterAxis = this.yAxisLeft;\n\n  if (this.yAxisRight.master == false) {\n    if (yAxisRightUsed == true) {\n      this.yAxisLeft.lineOffset = this.yAxisRight.width;\n    } else {\n      this.yAxisLeft.lineOffset = 0;\n    }\n\n    resized = this.yAxisLeft.redraw() || resized;\n    resized = this.yAxisRight.redraw() || resized;\n  } else {\n    resized = this.yAxisRight.redraw() || resized;\n  }\n\n  // clean the accumulated lists\n  var tempGroups = [\n    \"__barStackLeft\",\n    \"__barStackRight\",\n    \"__lineStackLeft\",\n    \"__lineStackRight\",\n  ];\n  for (i = 0; i < tempGroups.length; i++) {\n    if (groupIds.indexOf(tempGroups[i]) != -1) {\n      groupIds.splice(groupIds.indexOf(tempGroups[i]), 1);\n    }\n  }\n\n  return resized;\n};\n\n/**\n * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function\n *\n * @param {boolean} axisUsed\n * @param {vis.DataAxis}  axis\n * @returns {boolean}\n * @private\n */\nLineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) {\n  var changed = false;\n  if (axisUsed == false) {\n    if (axis.dom.frame.parentNode && axis.hidden == false) {\n      axis.hide();\n      changed = true;\n    }\n  } else {\n    if (!axis.dom.frame.parentNode && axis.hidden == true) {\n      axis.show();\n      changed = true;\n    }\n  }\n  return changed;\n};\n\n/**\n * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the\n * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for\n * the yAxis.\n *\n * @param {Array.<Object>} datapoints\n * @private\n */\nLineGraph.prototype._convertXcoordinates = function (datapoints) {\n  var toScreen = this.body.util.toScreen;\n  for (var i = 0; i < datapoints.length; i++) {\n    datapoints[i].screen_x = toScreen(datapoints[i].x) + this.props.width;\n    datapoints[i].screen_y = datapoints[i].y; //starting point for range calculations\n    if (datapoints[i].end != undefined) {\n      datapoints[i].screen_end = toScreen(datapoints[i].end) + this.props.width;\n    } else {\n      datapoints[i].screen_end = undefined;\n    }\n  }\n};\n\n/**\n * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the\n * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for\n * the yAxis.\n *\n * @param {Array.<Object>} datapoints\n * @param {vis.GraphGroup} group\n * @private\n */\nLineGraph.prototype._convertYcoordinates = function (datapoints, group) {\n  var axis = this.yAxisLeft;\n  var svgHeight = Number(this.svg.style.height.replace(\"px\", \"\"));\n  if (group.options.yAxisOrientation == \"right\") {\n    axis = this.yAxisRight;\n  }\n  for (var i = 0; i < datapoints.length; i++) {\n    datapoints[i].screen_y = Math.round(axis.convertValue(datapoints[i].y));\n  }\n  group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0)));\n};\n\nexport default LineGraph;\n", "/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nlet string = \"string\";\nlet bool = \"boolean\";\nlet number = \"number\";\nlet array = \"array\";\nlet date = \"date\";\nlet object = \"object\"; // should only be in a __type__ property\nlet dom = \"dom\";\nlet moment = \"moment\";\nlet any = \"any\";\n\nlet allOptions = {\n  configure: {\n    enabled: { boolean: bool },\n    filter: { boolean: bool, function: \"function\" },\n    container: { dom },\n    __type__: { object, boolean: bool, function: \"function\" },\n  },\n\n  //globals :\n  alignCurrentTime: { string, undefined: \"undefined\" },\n  yAxisOrientation: { string: [\"left\", \"right\"] },\n  defaultGroup: { string },\n  sort: { boolean: bool },\n  sampling: { boolean: bool },\n  stack: { boolean: bool },\n  graphHeight: { string, number },\n  shaded: {\n    enabled: { boolean: bool },\n    orientation: { string: [\"bottom\", \"top\", \"zero\", \"group\"] }, // top, bottom, zero, group\n    groupId: { object },\n    __type__: { boolean: bool, object },\n  },\n  style: { string: [\"line\", \"bar\", \"points\"] }, // line, bar\n  barChart: {\n    width: { number },\n    minWidth: { number },\n    sideBySide: { boolean: bool },\n    align: { string: [\"left\", \"center\", \"right\"] },\n    __type__: { object },\n  },\n  interpolation: {\n    enabled: { boolean: bool },\n    parametrization: { string: [\"centripetal\", \"chordal\", \"uniform\"] }, // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n    alpha: { number },\n    __type__: { object, boolean: bool },\n  },\n  drawPoints: {\n    enabled: { boolean: bool },\n    onRender: { function: \"function\" },\n    size: { number },\n    style: { string: [\"square\", \"circle\"] }, // square, circle\n    __type__: { object, boolean: bool, function: \"function\" },\n  },\n  dataAxis: {\n    showMinorLabels: { boolean: bool },\n    showMajorLabels: { boolean: bool },\n    showWeekScale: { boolean: bool },\n    icons: { boolean: bool },\n    width: { string, number },\n    visible: { boolean: bool },\n    alignZeros: { boolean: bool },\n    left: {\n      range: {\n        min: { number, undefined: \"undefined\" },\n        max: { number, undefined: \"undefined\" },\n        __type__: { object },\n      },\n      format: { function: \"function\" },\n      title: {\n        text: { string, number, undefined: \"undefined\" },\n        style: { string, undefined: \"undefined\" },\n        __type__: { object },\n      },\n      __type__: { object },\n    },\n    right: {\n      range: {\n        min: { number, undefined: \"undefined\" },\n        max: { number, undefined: \"undefined\" },\n        __type__: { object },\n      },\n      format: { function: \"function\" },\n      title: {\n        text: { string, number, undefined: \"undefined\" },\n        style: { string, undefined: \"undefined\" },\n        __type__: { object },\n      },\n      __type__: { object },\n    },\n    __type__: { object },\n  },\n  legend: {\n    enabled: { boolean: bool },\n    icons: { boolean: bool },\n    left: {\n      visible: { boolean: bool },\n      position: {\n        string: [\"top-right\", \"bottom-right\", \"top-left\", \"bottom-left\"],\n      },\n      __type__: { object },\n    },\n    right: {\n      visible: { boolean: bool },\n      position: {\n        string: [\"top-right\", \"bottom-right\", \"top-left\", \"bottom-left\"],\n      },\n      __type__: { object },\n    },\n    __type__: { object, boolean: bool },\n  },\n  groups: {\n    visibility: { any },\n    __type__: { object },\n  },\n\n  autoResize: { boolean: bool },\n  throttleRedraw: { number }, // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511\n  clickToUse: { boolean: bool },\n  end: { number, date, string, moment },\n  format: {\n    minorLabels: {\n      millisecond: { string, undefined: \"undefined\" },\n      second: { string, undefined: \"undefined\" },\n      minute: { string, undefined: \"undefined\" },\n      hour: { string, undefined: \"undefined\" },\n      weekday: { string, undefined: \"undefined\" },\n      day: { string, undefined: \"undefined\" },\n      week: { string, undefined: \"undefined\" },\n      month: { string, undefined: \"undefined\" },\n      quarter: { string, undefined: \"undefined\" },\n      year: { string, undefined: \"undefined\" },\n      __type__: { object },\n    },\n    majorLabels: {\n      millisecond: { string, undefined: \"undefined\" },\n      second: { string, undefined: \"undefined\" },\n      minute: { string, undefined: \"undefined\" },\n      hour: { string, undefined: \"undefined\" },\n      weekday: { string, undefined: \"undefined\" },\n      day: { string, undefined: \"undefined\" },\n      week: { string, undefined: \"undefined\" },\n      month: { string, undefined: \"undefined\" },\n      quarter: { string, undefined: \"undefined\" },\n      year: { string, undefined: \"undefined\" },\n      __type__: { object },\n    },\n    __type__: { object },\n  },\n  moment: { function: \"function\" },\n  height: { string, number },\n  hiddenDates: {\n    start: { date, number, string, moment },\n    end: { date, number, string, moment },\n    repeat: { string },\n    __type__: { object, array },\n  },\n  locale: { string },\n  locales: {\n    __any__: { any },\n    __type__: { object },\n  },\n  max: { date, number, string, moment },\n  maxHeight: { number, string },\n  maxMinorChars: { number },\n  min: { date, number, string, moment },\n  minHeight: { number, string },\n  moveable: { boolean: bool },\n  multiselect: { boolean: bool },\n  orientation: { string },\n  showCurrentTime: { boolean: bool },\n  showMajorLabels: { boolean: bool },\n  showMinorLabels: { boolean: bool },\n  showWeekScale: { boolean: bool },\n  snap: { function: \"function\", null: \"null\" },\n  start: { date, number, string, moment },\n  timeAxis: {\n    scale: { string, undefined: \"undefined\" },\n    step: { number, undefined: \"undefined\" },\n    __type__: { object },\n  },\n  width: { string, number },\n  zoomable: { boolean: bool },\n  zoomKey: { string: [\"ctrlKey\", \"altKey\", \"metaKey\", \"\"] },\n  zoomMax: { number },\n  zoomMin: { number },\n  zIndex: { number },\n  __type__: { object },\n};\n\nlet configureOptions = {\n  global: {\n    alignCurrentTime: [\n      \"none\",\n      \"year\",\n      \"month\",\n      \"quarter\",\n      \"week\",\n      \"isoWeek\",\n      \"day\",\n      \"date\",\n      \"hour\",\n      \"minute\",\n      \"second\",\n    ],\n    //yAxisOrientation: ['left','right'], // TDOO: enable as soon as Grahp2d doesn't crash when changing this on the fly\n    sort: true,\n    sampling: true,\n    stack: false,\n    shaded: {\n      enabled: false,\n      orientation: [\"zero\", \"top\", \"bottom\", \"group\"], // zero, top, bottom\n    },\n    style: [\"line\", \"bar\", \"points\"], // line, bar\n    barChart: {\n      width: [50, 5, 100, 5],\n      minWidth: [50, 5, 100, 5],\n      sideBySide: false,\n      align: [\"left\", \"center\", \"right\"], // left, center, right\n    },\n    interpolation: {\n      enabled: true,\n      parametrization: [\"centripetal\", \"chordal\", \"uniform\"], // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n    },\n    drawPoints: {\n      enabled: true,\n      size: [6, 2, 30, 1],\n      style: [\"square\", \"circle\"], // square, circle\n    },\n    dataAxis: {\n      showMinorLabels: true,\n      showMajorLabels: true,\n      showWeekScale: false,\n      icons: false,\n      width: [40, 0, 200, 1],\n      visible: true,\n      alignZeros: true,\n      left: {\n        //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined},\n        //format: function (value) {return value;},\n        title: { text: \"\", style: \"\" },\n      },\n      right: {\n        //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined},\n        //format: function (value) {return value;},\n        title: { text: \"\", style: \"\" },\n      },\n    },\n    legend: {\n      enabled: false,\n      icons: true,\n      left: {\n        visible: true,\n        position: [\"top-right\", \"bottom-right\", \"top-left\", \"bottom-left\"], // top/bottom - left,right\n      },\n      right: {\n        visible: true,\n        position: [\"top-right\", \"bottom-right\", \"top-left\", \"bottom-left\"], // top/bottom - left,right\n      },\n    },\n\n    autoResize: true,\n    clickToUse: false,\n    end: \"\",\n    format: {\n      minorLabels: {\n        millisecond: \"SSS\",\n        second: \"s\",\n        minute: \"HH:mm\",\n        hour: \"HH:mm\",\n        weekday: \"ddd D\",\n        day: \"D\",\n        week: \"w\",\n        month: \"MMM\",\n        quarter: \"[Q]Q\",\n        year: \"YYYY\",\n      },\n      majorLabels: {\n        millisecond: \"HH:mm:ss\",\n        second: \"D MMMM HH:mm\",\n        minute: \"ddd D MMMM\",\n        hour: \"ddd D MMMM\",\n        weekday: \"MMMM YYYY\",\n        day: \"MMMM YYYY\",\n        week: \"MMMM YYYY\",\n        month: \"YYYY\",\n        quarter: \"YYYY\",\n        year: \"\",\n      },\n    },\n\n    height: \"\",\n    locale: \"\",\n    max: \"\",\n    maxHeight: \"\",\n    maxMinorChars: [7, 0, 20, 1],\n    min: \"\",\n    minHeight: \"\",\n    moveable: true,\n    orientation: [\"both\", \"bottom\", \"top\"],\n    showCurrentTime: false,\n    showMajorLabels: true,\n    showMinorLabels: true,\n    showWeekScale: false,\n    start: \"\",\n    width: \"100%\",\n    zoomable: true,\n    zoomKey: [\"ctrlKey\", \"altKey\", \"metaKey\", \"\"],\n    zoomMax: [315360000000000, 10, 315360000000000, 1],\n    zoomMin: [10, 10, 315360000000000, 1],\n    zIndex: 0,\n  },\n};\n\nexport { allOptions, configureOptions };\n", "import moment from \"../module/moment.js\";\nimport util, { typeCoerceDataSet, isDataViewLike } from \"../util.js\";\nimport { DataSet } from \"vis-data/esnext\";\nimport Range from \"./Range.js\";\nimport Core from \"./Core.js\";\nimport TimeAxis from \"./component/TimeAxis.js\";\nimport CurrentTime from \"./component/CurrentTime.js\";\nimport CustomTime from \"./component/CustomTime.js\";\nimport LineGraph from \"./component/LineGraph.js\";\n\nimport { Validator } from \"../shared/Validator.js\";\nimport { printStyle } from \"../shared/Validator.js\";\nimport { allOptions } from \"./optionsGraph2d.js\";\nimport { configureOptions } from \"./optionsGraph2d.js\";\n\nimport Configurator from \"../shared/Configurator.js\";\n\n/**\n * Create a timeline visualization\n * @param {HTMLElement} container\n * @param {vis.DataSet | Array} [items]\n * @param {vis.DataSet | Array | vis.DataView | Object} [groups]\n * @param {Object} [options]  See Graph2d.setOptions for the available options.\n * @constructor Graph2d\n * @extends Core\n */\nfunction Graph2d(container, items, groups, options) {\n  // if the third element is options, the forth is groups (optionally);\n  if (\n    !(Array.isArray(groups) || isDataViewLike(groups)) &&\n    groups instanceof Object\n  ) {\n    var forthArgument = options;\n    options = groups;\n    groups = forthArgument;\n  }\n\n  // TODO: REMOVE THIS in the next MAJOR release\n  // see https://github.com/almende/vis/issues/2511\n  if (options && options.throttleRedraw) {\n    console.warn(\n      'Graph2d option \"throttleRedraw\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.',\n    );\n  }\n\n  var me = this;\n  this.defaultOptions = {\n    start: null,\n    end: null,\n\n    autoResize: true,\n\n    orientation: {\n      axis: \"bottom\", // axis orientation: 'bottom', 'top', or 'both'\n      item: \"bottom\", // not relevant for Graph2d\n    },\n\n    moment: moment,\n\n    width: null,\n    height: null,\n    maxHeight: null,\n    minHeight: null,\n  };\n  this.options = util.deepExtend({}, this.defaultOptions);\n\n  // Create the DOM, props, and emitter\n  this._create(container);\n\n  // all components listed here will be repainted automatically\n  this.components = [];\n\n  this.body = {\n    dom: this.dom,\n    domProps: this.props,\n    emitter: {\n      on: this.on.bind(this),\n      off: this.off.bind(this),\n      emit: this.emit.bind(this),\n    },\n    hiddenDates: [],\n    util: {\n      getScale() {\n        return me.timeAxis.step.scale;\n      },\n      getStep() {\n        return me.timeAxis.step.step;\n      },\n\n      toScreen: me._toScreen.bind(me),\n      toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width\n      toTime: me._toTime.bind(me),\n      toGlobalTime: me._toGlobalTime.bind(me),\n    },\n  };\n\n  // range\n  this.range = new Range(this.body);\n  this.components.push(this.range);\n  this.body.range = this.range;\n\n  // time axis\n  this.timeAxis = new TimeAxis(this.body);\n  this.components.push(this.timeAxis);\n  //this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis);\n\n  // current time bar\n  this.currentTime = new CurrentTime(this.body);\n  this.components.push(this.currentTime);\n\n  // item set\n  this.linegraph = new LineGraph(this.body);\n\n  this.components.push(this.linegraph);\n\n  this.itemsData = null; // DataSet\n  this.groupsData = null; // DataSet\n\n  this.on(\"tap\", function (event) {\n    me.emit(\"click\", me.getEventProperties(event));\n  });\n  this.on(\"doubletap\", function (event) {\n    me.emit(\"doubleClick\", me.getEventProperties(event));\n  });\n  this.dom.root.oncontextmenu = function (event) {\n    me.emit(\"contextmenu\", me.getEventProperties(event));\n  };\n\n  //Single time autoscale/fit\n  this.initialFitDone = false;\n  this.on(\"changed\", function () {\n    if (me.itemsData == null) return;\n    if (!me.initialFitDone && !me.options.rollingMode) {\n      me.initialFitDone = true;\n      if (me.options.start != undefined || me.options.end != undefined) {\n        if (me.options.start == undefined || me.options.end == undefined) {\n          var range = me.getItemRange();\n        }\n\n        var start =\n          me.options.start != undefined ? me.options.start : range.min;\n        var end = me.options.end != undefined ? me.options.end : range.max;\n        me.setWindow(start, end, { animation: false });\n      } else {\n        me.fit({ animation: false });\n      }\n    }\n\n    if (\n      !me.initialDrawDone &&\n      (me.initialRangeChangeDone ||\n        (!me.options.start && !me.options.end) ||\n        me.options.rollingMode)\n    ) {\n      me.initialDrawDone = true;\n      me.dom.root.style.visibility = \"visible\";\n      me.dom.loadingScreen.parentNode.removeChild(me.dom.loadingScreen);\n      if (me.options.onInitialDrawComplete) {\n        setTimeout(() => {\n          return me.options.onInitialDrawComplete();\n        }, 0);\n      }\n    }\n  });\n\n  // apply options\n  if (options) {\n    this.setOptions(options);\n  }\n\n  // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS!\n  if (groups) {\n    this.setGroups(groups);\n  }\n\n  // create itemset\n  if (items) {\n    this.setItems(items);\n  }\n\n  // draw for the first time\n  this._redraw();\n}\n\n// Extend the functionality from Core\nGraph2d.prototype = new Core();\n\nGraph2d.prototype.setOptions = function (options) {\n  // validate options\n  let errorFound = Validator.validate(options, allOptions);\n  if (errorFound === true) {\n    console.log(\n      \"%cErrors have been found in the supplied options object.\",\n      printStyle,\n    );\n  }\n\n  Core.prototype.setOptions.call(this, options);\n};\n\n/**\n * Set items\n * @param {vis.DataSet | Array | null} items\n */\nGraph2d.prototype.setItems = function (items) {\n  var initialLoad = this.itemsData == null;\n\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!items) {\n    newDataSet = null;\n  } else if (isDataViewLike(items)) {\n    newDataSet = typeCoerceDataSet(items);\n  } else {\n    // turn an array into a dataset\n    newDataSet = typeCoerceDataSet(new DataSet(items));\n  }\n\n  // set items\n  if (this.itemsData) {\n    // stop maintaining a coerced version of the old data set\n    this.itemsData.dispose();\n  }\n  this.itemsData = newDataSet;\n  this.linegraph &&\n    this.linegraph.setItems(newDataSet != null ? newDataSet.rawDS : null);\n\n  if (initialLoad) {\n    if (this.options.start != undefined || this.options.end != undefined) {\n      var start = this.options.start != undefined ? this.options.start : null;\n      var end = this.options.end != undefined ? this.options.end : null;\n      this.setWindow(start, end, { animation: false });\n    } else {\n      this.fit({ animation: false });\n    }\n  }\n};\n\n/**\n * Set groups\n * @param {vis.DataSet | Array} groups\n */\nGraph2d.prototype.setGroups = function (groups) {\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!groups) {\n    newDataSet = null;\n  } else if (isDataViewLike(groups)) {\n    newDataSet = groups;\n  } else {\n    // turn an array into a dataset\n    newDataSet = new DataSet(groups);\n  }\n\n  this.groupsData = newDataSet;\n  this.linegraph.setGroups(newDataSet);\n};\n\n/**\n * Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right).\n * @param {vis.GraphGroup.id} groupId\n * @param {number} width\n * @param {number} height\n * @returns {{icon: SVGElement, label: string, orientation: string}|string}\n */\nGraph2d.prototype.getLegend = function (groupId, width, height) {\n  if (width === undefined) {\n    width = 15;\n  }\n  if (height === undefined) {\n    height = 15;\n  }\n  if (this.linegraph.groups[groupId] !== undefined) {\n    return this.linegraph.groups[groupId].getLegend(width, height);\n  } else {\n    return \"cannot find group:'\" + groupId + \"'\";\n  }\n};\n\n/**\n * This checks if the visible option of the supplied group (by ID) is true or false.\n * @param {vis.GraphGroup.id} groupId\n * @returns {boolean}\n */\nGraph2d.prototype.isGroupVisible = function (groupId) {\n  if (this.linegraph.groups[groupId] !== undefined) {\n    return (\n      this.linegraph.groups[groupId].visible &&\n      (this.linegraph.options.groups.visibility[groupId] === undefined ||\n        this.linegraph.options.groups.visibility[groupId] == true)\n    );\n  } else {\n    return false;\n  }\n};\n\n/**\n * Get the data range of the item set.\n * @returns {{min: Date, max: Date}} range  A range with a start and end Date.\n *                                          When no minimum is found, min==null\n *                                          When no maximum is found, max==null\n */\nGraph2d.prototype.getDataRange = function () {\n  var min = null;\n  var max = null;\n\n  // calculate min from start filed\n  for (var groupId in this.linegraph.groups) {\n    if (\n      !Object.prototype.hasOwnProperty.call(this.linegraph.groups, groupId) ||\n      this.linegraph.groups[groupId].visible !== true\n    )\n      continue;\n\n    for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) {\n      var item = this.linegraph.groups[groupId].itemsData[i];\n      var value = util.convert(item.x, \"Date\").valueOf();\n      min = min == null ? value : min > value ? value : min;\n      max = max == null ? value : max < value ? value : max;\n    }\n  }\n\n  return {\n    min: min != null ? new Date(min) : null,\n    max: max != null ? new Date(max) : null,\n  };\n};\n\n/**\n * Generate Timeline related information from an event\n * @param {Event} event\n * @return {Object} An object with related information, like on which area\n *                  The event happened, whether clicked on an item, etc.\n */\nGraph2d.prototype.getEventProperties = function (event) {\n  var clientX = event.center ? event.center.x : event.clientX;\n  var clientY = event.center ? event.center.y : event.clientY;\n  var x = clientX - util.getAbsoluteLeft(this.dom.centerContainer);\n  var y = clientY - util.getAbsoluteTop(this.dom.centerContainer);\n  var time = this._toTime(x);\n\n  var customTime = CustomTime.customTimeFromTarget(event);\n\n  var element = util.getTarget(event);\n  var what = null;\n  if (util.hasParent(element, this.timeAxis.dom.foreground)) {\n    what = \"axis\";\n  } else if (\n    this.timeAxis2 &&\n    util.hasParent(element, this.timeAxis2.dom.foreground)\n  ) {\n    what = \"axis\";\n  } else if (util.hasParent(element, this.linegraph.yAxisLeft.dom.frame)) {\n    what = \"data-axis\";\n  } else if (util.hasParent(element, this.linegraph.yAxisRight.dom.frame)) {\n    what = \"data-axis\";\n  } else if (util.hasParent(element, this.linegraph.legendLeft.dom.frame)) {\n    what = \"legend\";\n  } else if (util.hasParent(element, this.linegraph.legendRight.dom.frame)) {\n    what = \"legend\";\n  } else if (customTime != null) {\n    what = \"custom-time\";\n  } else if (util.hasParent(element, this.currentTime.bar)) {\n    what = \"current-time\";\n  } else if (util.hasParent(element, this.dom.center)) {\n    what = \"background\";\n  }\n\n  var value = [];\n  var yAxisLeft = this.linegraph.yAxisLeft;\n  var yAxisRight = this.linegraph.yAxisRight;\n  if (!yAxisLeft.hidden && this.itemsData.length > 0) {\n    value.push(yAxisLeft.screenToValue(y));\n  }\n  if (!yAxisRight.hidden && this.itemsData.length > 0) {\n    value.push(yAxisRight.screenToValue(y));\n  }\n\n  return {\n    event: event,\n    customTime: customTime ? customTime.options.id : null,\n    what: what,\n    pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX,\n    pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY,\n    x: x,\n    y: y,\n    time: time,\n    value: value,\n  };\n};\n\n/**\n * Load a configurator\n * @return {Object}\n * @private\n */\nGraph2d.prototype._createConfigurator = function () {\n  return new Configurator(this, this.dom.container, configureOptions);\n};\n\nexport default Graph2d;\n", "// styles\nimport \"./shared/activator.css\";\nimport \"./shared/bootstrap.css\";\nimport \"./shared/configuration.css\";\nimport \"./shared/tooltip.css\";\nimport \"./timeline/component/css/animation.css\";\nimport \"./timeline/component/css/currenttime.css\";\nimport \"./timeline/component/css/customtime.css\";\nimport \"./timeline/component/css/dataaxis.css\";\nimport \"./timeline/component/css/item.css\";\nimport \"./timeline/component/css/itemset.css\";\nimport \"./timeline/component/css/labelset.css\";\nimport \"./timeline/component/css/panel.css\";\nimport \"./timeline/component/css/pathStyles.css\";\nimport \"./timeline/component/css/timeaxis.css\";\nimport \"./timeline/component/css/timeline.css\";\n\n// locales\nimport \"moment/locale/de\";\nimport \"moment/locale/es\";\nimport \"moment/locale/fr\";\nimport \"moment/locale/it\";\nimport \"moment/locale/ja\";\nimport \"moment/locale/nl\";\nimport \"moment/locale/pl\";\nimport \"moment/locale/ru\";\nimport \"moment/locale/tr\";\nimport \"moment/locale/uk\";\n\n// utils\nimport * as util from \"vis-util/esnext\";\nimport * as DOMutil from \"./DOMutil.js\";\n\n// data\nimport { DataSet, DataView, Queue } from \"vis-data/esnext\";\n\n// Timeline\nimport Timeline from \"./timeline/Timeline.js\";\nimport Graph2d from \"./timeline/Graph2d.js\";\n\nimport Core from \"./timeline/Core.js\";\nimport * as DateUtil from \"./timeline/DateUtil.js\";\nimport Range from \"./timeline/Range.js\";\nimport * as stack from \"./timeline/Stack.js\";\nimport TimeStep from \"./timeline/TimeStep.js\";\n\nimport Item from \"./timeline/component/item/Item.js\";\nimport BackgroundItem from \"./timeline/component/item/BackgroundItem.js\";\nimport BoxItem from \"./timeline/component/item/BoxItem.js\";\nimport ClusterItem from \"./timeline/component/item/ClusterItem.js\";\nimport PointItem from \"./timeline/component/item/PointItem.js\";\nimport RangeItem from \"./timeline/component/item/RangeItem.js\";\n\nimport BackgroundGroup from \"./timeline/component/BackgroundGroup.js\";\nimport Component from \"./timeline/component/Component.js\";\nimport CurrentTime from \"./timeline/component/CurrentTime.js\";\nimport CustomTime from \"./timeline/component/CustomTime.js\";\nimport DataAxis from \"./timeline/component/DataAxis.js\";\nimport DataScale from \"./timeline/component/DataScale.js\";\nimport GraphGroup from \"./timeline/component/GraphGroup.js\";\nimport Group from \"./timeline/component/Group.js\";\nimport ItemSet from \"./timeline/component/ItemSet.js\";\nimport Legend from \"./timeline/component/Legend.js\";\nimport LineGraph from \"./timeline/component/LineGraph.js\";\nimport TimeAxis from \"./timeline/component/TimeAxis.js\";\n\n// bundled external libraries\nimport moment from \"./module/moment.js\";\nimport Hammer from \"./module/hammer.js\";\nimport keycharm from \"keycharm\";\n\n// TODO: This should probably be moved somewhere else to ensure that both builds\n// behave the same way.\nconst defaultLanguage = DOMutil.getNavigatorLanguage();\nmoment.locale(defaultLanguage);\n\nconst timeline = {\n  Core,\n  DateUtil,\n  Range,\n  stack,\n  TimeStep,\n\n  components: {\n    items: {\n      Item,\n      BackgroundItem,\n      BoxItem,\n      ClusterItem,\n      PointItem,\n      RangeItem,\n    },\n\n    BackgroundGroup,\n    Component,\n    CurrentTime,\n    CustomTime,\n    DataAxis,\n    DataScale,\n    GraphGroup,\n    Group,\n    ItemSet,\n    Legend,\n    LineGraph,\n    TimeAxis,\n  },\n};\n\nexport {\n  DOMutil,\n  DataSet,\n  DataView,\n  Graph2d,\n  Hammer,\n  Queue,\n  Timeline,\n  keycharm,\n  moment,\n  timeline,\n  util,\n};\n", "// Adapts the server-side FullCalendar event hash (FullCalendar::Event#to_h) into\n// vis-timeline items/groups. Kept on the client because the group assignment (which\n// resource row an item belongs to) is decided by the fetch origin, not the payload.\n\n// Small, stable string hash so DataSet ids survive refetches and dedupe.\nfunction hashString(str) {\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    hash = ((hash << 5) - hash + str.charCodeAt(i)) | 0;\n  }\n  return (hash >>> 0).toString(36);\n}\n\nfunction escapeHtml(str) {\n  const div = document.createElement('div');\n  div.textContent = str == null ? '' : String(str);\n  return div.innerHTML;\n}\n\n// Collapse an HTML fragment to single-line plain text (for the bar label).\nfunction htmlToText(html) {\n  const div = document.createElement('div');\n  div.innerHTML = html == null ? '' : String(html);\n  return (div.textContent || '').replace(/\\s+/g, ' ').trim();\n}\n\n// Build a vis-timeline group (a resource row). When `url` is given, the row label\n// links to the resource (opens in a new tab so the planning view stays open).\nexport function buildGroup(composedId, label, url) {\n  const safeLabel = escapeHtml(label);\n  const content = url\n    ? `<a href=\"${escapeHtml(url)}\" target=\"_blank\" rel=\"noopener\">${safeLabel}</a>`\n    : safeLabel;\n  return {id: composedId, content};\n}\n\n// Map one FullCalendar event hash to a vis-timeline item assigned to `groupId`.\nexport function fcEventToVisItem(fcEvent, groupId) {\n  const start = fcEvent.start;\n  const end = fcEvent.end;\n  const id = `${groupId}:${hashString(`${start}|${end || ''}|${fcEvent.title || ''}`)}`;\n\n  let type;\n  if (fcEvent.display === 'background') {\n    type = 'background';\n  } else if (!end) {\n    type = 'point';\n  } else {\n    type = 'range';\n  }\n\n  // Keep the bar itself single-line (uniform row height): plain text label.\n  // The richer HTML from the calendar partials becomes the hover tooltip.\n  const richContent = fcEvent.extendedProps && fcEvent.extendedProps.content;\n  const labelText = (fcEvent.title != null && fcEvent.title !== '')\n    ? fcEvent.title\n    : htmlToText(richContent);\n\n  const bg = fcEvent.backgroundColor || fcEvent.color;\n  const styleParts = [];\n  if (bg) styleParts.push(`background-color:${bg}`);\n  if (fcEvent.borderColor) styleParts.push(`border-color:${fcEvent.borderColor}`);\n\n  const item = {\n    id,\n    group: groupId,\n    start,\n    type,\n    content: escapeHtml(labelText),\n    title: richContent || escapeHtml(labelText), // hover tooltip (vis renders HTML)\n  };\n  if (end) item.end = end;\n  if (styleParts.length) item.style = styleParts.join(';');\n  if (fcEvent.url) item.url = fcEvent.url;\n  if (fcEvent.extendedProps && fcEvent.extendedProps.remoteUrl) item.remoteUrl = true;\n\n  return item;\n}\n", "import {Controller} from '@hotwired/stimulus';\nimport {Timeline, DataSet} from 'vis-timeline/standalone';\nimport {fcEventToVisItem, buildGroup} from '../components/planning_calendar/event-adapter';\n\n// Planning calendar. Renders the calendars of several resources (people, rooms,\n// courses) as grouped rows on a shared horizontal time axis (vis-timeline).\n//\n// Each resource is identified by its composed_id (\"person_5\"). Resources are added/removed\n// through the Select2 multi-select picker; every resource has its own events URL so only new\n// resources are fetched and removed ones are fully purged from the DataSet.\nexport class PlanningCalendarController extends Controller {\n\n  static targets = ['timeline', 'picker', 'empty'];\n\n  static values = {\n    resourceEventsUrl: String,\n    initialResources: Array,\n  };\n\n  connect() {\n    this.itemsDS = new DataSet();\n    this.groupsDS = new DataSet();\n    this.loadedRanges = new Map(); // composedId -> {min: Date, max: Date}\n    this.pending = new Set();      // composedIds currently being fetched\n\n    const now = new Date();\n    const start = new Date(now);\n    start.setDate(start.getDate() - 1);\n    const end = new Date(now);\n    end.setDate(end.getDate() + 14);\n\n    this.timeline = new Timeline(this.timelineTarget, this.itemsDS, this.groupsDS, {\n      // No stacking -> every resource row has the same fixed height (one item tall).\n      // For a planning view this is what matters: a common free gap is a time span\n      // with no bar across all rows.\n      stack: false,\n      orientation: 'top',\n      start,\n      end,\n      zoomMin: 1000 * 60 * 60 * 2,           // 2 hours\n      zoomMax: 1000 * 60 * 60 * 24 * 366,    // ~1 year\n      margin: {item: 4, axis: 8},\n      // Fill the fixed-height container; overflowing rows scroll in the label column.\n      height: '100%',\n      tooltip: {followMouse: true, overflowMethod: 'cap'},\n      format: this.germanLabelFormat(),\n    });\n\n    this.timeline.on('rangechanged', () => this.loadVisibleRanges());\n    this.timeline.on('click', (props) => this.onItemClick(props));\n\n    // Distinguish a real click from a drag-to-pan that happens to start on an event.\n    this.dragStart = null;\n    this.onMouseDown = (e) => { this.dragStart = {x: e.pageX, y: e.pageY}; };\n    this.timelineTarget.addEventListener('mousedown', this.onMouseDown);\n\n    this.wirePicker();\n    this.preselectInitialResources();\n    this.updateEmptyState();\n  }\n\n  disconnect() {\n    if (this.timeline) {\n      this.timelineTarget.removeEventListener('mousedown', this.onMouseDown);\n      this.timeline.destroy();\n      this.timeline = null;\n    }\n  }\n\n  // --- Picker (Select2 multi-select) -------------------------------------------------\n\n  wirePicker() {\n    if (!this.hasPickerTarget) return;\n    const $picker = window.jQuery(this.pickerTarget);\n    // Select2 v3 fires `change` with `added`/`removed` for multi-selects.\n    $picker.on('change', (e) => {\n      if (e.added) {\n        this.addResource({id: e.added.id, label: e.added.text, url: e.added.url});\n      }\n      if (e.removed) {\n        this.removeResource(e.removed.id);\n      }\n    });\n  }\n\n  // The Select2 tags for the preselection are restored by activateSelect2 from the\n  // picker's `data-values` attribute, so here we only need to add the timeline rows.\n  preselectInitialResources() {\n    (this.initialResourcesValue || []).forEach((r) => this.addResource({id: r.id, label: r.label, url: r.url}));\n  }\n\n  // --- Resources ---------------------------------------------------------------------\n\n  addResource({id, label, url}) {\n    if (this.groupsDS.get(id)) return; // idempotent\n    this.groupsDS.add(buildGroup(id, label, url));\n    this.fetchResource(id);\n    this.updateEmptyState();\n  }\n\n  removeResource(id) {\n    const itemIds = this.itemsDS.getIds({filter: (item) => item.group === id});\n    this.itemsDS.remove(itemIds);\n    this.groupsDS.remove(id);\n    this.loadedRanges.delete(id);\n    this.updateEmptyState();\n  }\n\n  // Show the centered hint while no resource row exists.\n  updateEmptyState() {\n    if (this.hasEmptyTarget) {\n      this.emptyTarget.hidden = this.groupsDS.length > 0;\n    }\n  }\n\n  fetchResource(id, {start, end, replace = false} = {}) {\n    const window_ = this.timeline.getWindow();\n    const from = start || window_.start;\n    const to = end || window_.end;\n\n    const url = new URL(this.resourceEventsUrlValue, document.baseURI);\n    url.searchParams.set('id', id);\n    url.searchParams.set('start', from.toISOString());\n    url.searchParams.set('end', to.toISOString());\n\n    this.pending.add(id);\n    fetch(url, {headers: {Accept: 'application/json'}})\n      .then((response) => {\n        if (response.status === 403 || response.status === 404) {\n          this.dropForbiddenResource(id);\n          return null;\n        }\n        if (!response.ok) return null;\n        return response.json();\n      })\n      .then((events) => {\n        if (!events) return;\n        const items = events.map((e) => fcEventToVisItem(e, id));\n        if (replace) {\n          // Refresh: drop this resource's events that no longer exist, upsert the rest.\n          // The timeline window/zoom is left untouched.\n          const fresh = new Set(items.map((i) => i.id));\n          const stale = this.itemsDS.getIds({filter: (i) => i.group === id && !fresh.has(i.id)});\n          this.itemsDS.remove(stale);\n          this.itemsDS.update(items);\n          this.loadedRanges.set(id, {min: from, max: to});\n        } else {\n          this.itemsDS.update(items); // upsert -> safe across overlapping refetches\n          this.rememberRange(id, from, to);\n        }\n        this.markConflicts(id);\n      })\n      .finally(() => this.pending.delete(id));\n  }\n\n  // Highlight double-bookings: any two timed events of the same resource that overlap in\n  // time get the conflict class. Rows keep their fixed height (no stacking).\n  markConflicts(groupId) {\n    const items = this.itemsDS.get({\n      filter: (i) => i.group === groupId && i.type !== 'background' && i.end != null,\n    });\n    items.sort((a, b) => new Date(a.start) - new Date(b.start));\n\n    const conflicting = new Set();\n    for (let i = 0; i < items.length; i++) {\n      const aEnd = new Date(items[i].end).getTime();\n      for (let j = i + 1; j < items.length; j++) {\n        if (new Date(items[j].start).getTime() >= aEnd) break; // sorted by start -> no more overlaps with i\n        conflicting.add(items[i].id);\n        conflicting.add(items[j].id);\n      }\n    }\n\n    this.itemsDS.update(items.map((it) => ({\n      id: it.id,\n      className: conflicting.has(it.id) ? 'planning-calendar-conflict' : '',\n    })));\n  }\n\n  // Re-fetch the events of all current resources for the visible window, without\n  // changing the view (window/zoom). Picks up changes made in another tab.\n  reload() {\n    this.groupsDS.getIds().forEach((id) => this.fetchResource(id, {replace: true}));\n  }\n\n  dropForbiddenResource(id) {\n    // Remove the row and its Select2 tag again.\n    this.groupsDS.remove(id);\n    this.loadedRanges.delete(id);\n    this.updateEmptyState();\n    if (this.hasPickerTarget && window.jQuery) {\n      const $picker = window.jQuery(this.pickerTarget);\n      const remaining = ($picker.select2('data') || []).filter((r) => r.id !== id);\n      $picker.select2('data', remaining);\n    }\n  }\n\n  rememberRange(id, from, to) {\n    const existing = this.loadedRanges.get(id);\n    if (!existing) {\n      this.loadedRanges.set(id, {min: from, max: to});\n    } else {\n      this.loadedRanges.set(id, {\n        min: from < existing.min ? from : existing.min,\n        max: to > existing.max ? to : existing.max,\n      });\n    }\n  }\n\n  // On pan/zoom, fetch resources whose loaded range does not yet cover the visible window.\n  loadVisibleRanges() {\n    const {start, end} = this.timeline.getWindow();\n    this.groupsDS.getIds().forEach((id) => {\n      if (this.pending.has(id)) return;\n      const range = this.loadedRanges.get(id);\n      if (range && start >= range.min && end <= range.max) return;\n      this.fetchResource(id, {start, end});\n    });\n  }\n\n  // --- Interaction -------------------------------------------------------------------\n\n  onItemClick(props) {\n    if (!props.item) return;\n    if (this.wasDrag(props)) return; // panned over an event -> not a click\n    const item = this.itemsDS.get(props.item);\n    if (!item || !item.url) return;\n    if (item.remoteUrl && window.jQuery) {\n      window.jQuery.ajax({url: item.url, dataType: 'script'});\n    } else {\n      window.location.href = item.url;\n    }\n  }\n\n  // True if the pointer moved more than a few px between mousedown and this click,\n  // i.e. the user dragged (panned) rather than clicked.\n  wasDrag(props) {\n    const start = this.dragStart;\n    if (!start || props.pageX == null) return false;\n    return Math.hypot(props.pageX - start.x, props.pageY - start.y) > 5;\n  }\n\n  // Remove all resources from the timeline and clear the picker.\n  clearAll() {\n    this.groupsDS.getIds().forEach((id) => this.removeResource(id));\n    if (this.hasPickerTarget && window.jQuery) {\n      window.jQuery(this.pickerTarget).select2('data', []);\n    }\n  }\n\n  // --- German axis labels (via Intl, no moment locale needed) ------------------------\n\n  germanLabelFormat() {\n    const fmt = (opts) => new Intl.DateTimeFormat('de-DE', opts);\n    const toDate = (d) => new Date(d.valueOf());\n    return {\n      minorLabels: (date, scale) => {\n        const d = toDate(date);\n        switch (scale) {\n          case 'second': return fmt({second: '2-digit'}).format(d);\n          case 'minute':\n          case 'hour': return fmt({hour: '2-digit', minute: '2-digit'}).format(d);\n          case 'weekday': return fmt({weekday: 'short', day: '2-digit'}).format(d);\n          case 'day':\n          case 'week': return fmt({day: '2-digit'}).format(d);\n          case 'month': return fmt({month: 'short'}).format(d);\n          case 'year': return fmt({year: 'numeric'}).format(d);\n          default: return '';\n        }\n      },\n      majorLabels: (date, scale) => {\n        const d = toDate(date);\n        switch (scale) {\n          case 'second':\n          case 'minute':\n          case 'hour': return fmt({weekday: 'long', day: '2-digit', month: 'long'}).format(d);\n          case 'weekday':\n          case 'day':\n          case 'week': return fmt({month: 'long', year: 'numeric'}).format(d);\n          case 'month': return fmt({year: 'numeric'}).format(d);\n          default: return '';\n        }\n      },\n    };\n  }\n}\n", "import {NestedFormController} from './nested-form.controller';\n\n// Manages the dynamic tariff rows of a TariffOwner form: add, copy (the intended\n// way to change a price: duplicate the row, end the validity of the original),\n// and replacing the rows with the templates of the course/exam type.\nexport class TariffRowsController extends NestedFormController {\n\n    static values = {\n        ...NestedFormController.values,\n        templatesUrl: String,\n        templatesUrlTemplate: String,\n        typeSelectSelector: String,\n        confirmReplace: String,\n        defaultTitle: String,\n        copySuffix: String,\n        templatesUnavailableMessage: String\n    }\n\n    connect() {\n        // Live card titles: typing a tariff name updates the card header.\n        this.element.addEventListener('input', (event) => {\n            if (this.nameInputSuffix(event.target)) {\n                this.refreshTitle(event.target.closest(this.wrapperSelectorValue));\n            }\n        });\n    }\n\n    rowHasContent(wrapper) {\n        let filled = false;\n        wrapper.querySelectorAll('input, select, textarea').forEach(el => {\n            if (filled) {\n                return;\n            }\n            const suffix = this.attributeSuffix(el.name || '');\n            if (!suffix || suffix === '[key]' || suffix === '[_destroy]') {\n                return;\n            }\n            const relevant = this.nameInputSuffix(el) ||\n                suffix === '[funding_type_id]' || suffix === '[product_id]' || suffix === '[unit_price]';\n            if (relevant && el.value && el.value.trim()) {\n                filled = true;\n            }\n        });\n        return filled;\n    }\n\n    add(e) {\n        e.preventDefault();\n        this.insertRow();\n    }\n\n    copy(e) {\n        e.preventDefault();\n        const source = e.target.closest(this.wrapperSelectorValue);\n        const values = this.extractValues(source);\n        Object.keys(values).forEach(suffix => {\n            if (suffix.startsWith('[name_attributes]') && suffix.endsWith('[text]') && values[suffix].trim()) {\n                values[suffix] = `${values[suffix].trim()} ${this.copySuffixValue}`.trim();\n            }\n        });\n        this.insertRow(values);\n    }\n\n    async applyTemplates(e) {\n        e.preventDefault();\n        const url = this.currentTemplatesUrl();\n        if (!url) {\n            bootbox.alert(this.templatesUnavailableMessageValue);\n            return;\n        }\n        const confirmed = this.hasMeaningfulRows() ? await this.confirmReplace() : true;\n        if (confirmed) {\n            await this.replaceWithTemplates(url);\n        }\n    }\n\n    // The type may just have been picked in the (unsaved) form \u2014 prefer the\n    // current select value over the URL rendered from the persisted record.\n    // Forms without a type select (e.g. the pricing model box modal) fall\n    // back to the URL of the persisted type.\n    currentTemplatesUrl() {\n        // AJAX modals may duplicate input IDs from a form underneath them.\n        const form = this.element.closest('form');\n        const select = this.typeSelectSelectorValue && form?.querySelector(this.typeSelectSelectorValue);\n        if (select) {\n            if (!select.value || !this.templatesUrlTemplateValue) {\n                return null;\n            }\n            return this.templatesUrlTemplateValue.replace('TYPE_ID', select.value);\n        }\n        return this.templatesUrlValue || null;\n    }\n\n    confirmReplace() {\n        return new Promise(resolve => {\n            bootbox.confirm({\n                message: this.confirmReplaceValue,\n                buttons: {\n                    cancel: {label: 'Abbrechen', className: 'pull-left'},\n                    confirm: {label: '\u00DCbernehmen', className: 'btn-primary'}\n                },\n                callback: resolve\n            });\n        });\n    }\n\n    hasRows() {\n        return this.element.querySelectorAll(this.wrapperSelectorValue).length > 0;\n    }\n\n    // Rows worth a confirmation before replacing: persisted ones or new rows\n    // the user already filled (the pre-rendered blank row does not count).\n    hasMeaningfulRows() {\n        return Array.from(this.element.querySelectorAll(this.wrapperSelectorValue)).some(wrapper => {\n            return wrapper.dataset.newRecord !== 'true' || this.rowHasContent(wrapper);\n        });\n    }\n\n    // Replaces the rows (except the ones in use) with the template rows\n    // rendered by the given URL. Also used by the tariff-template-copy\n    // controller when the course/exam type select changes \u2014 there without the\n    // alert: merely picking a type without templates is not asking for them.\n    async replaceWithTemplates(url, {alertWhenEmpty = true} = {}) {\n        const response = await fetch(url, {headers: {'Accept': 'text/html'}});\n        if (!response.ok) {\n            return;\n        }\n        const html = await response.text();\n        // Look for actual rows instead of blank text: in development Rails\n        // annotates even an empty partial with filename comments.\n        const parsed = document.createElement('template');\n        parsed.innerHTML = html;\n        if (!parsed.content.querySelector(this.wrapperSelectorValue)) {\n            if (alertWhenEmpty) {\n                // Type without template tariffs \u2014 explain instead of silently clearing.\n                bootbox.alert(this.templatesUnavailableMessageValue);\n            }\n            return;\n        }\n        this.element.querySelectorAll(this.wrapperSelectorValue).forEach(wrapper => {\n            if (wrapper.dataset.inUse !== 'true') {\n                wrapper.remove();\n            }\n        });\n        this.targetTarget.insertAdjacentHTML('beforebegin', html);\n        this.reattach(this.targetTarget.parentElement);\n        this.revealIfHidden();\n        this.element.dispatchEvent(new CustomEvent('tariff-rows:templates-applied', {bubbles: true}));\n    }\n\n    insertRow(values = null) {\n        const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, new Date().getTime().toString());\n        this.targetTarget.insertAdjacentHTML('beforebegin', content);\n        const row = this.targetTarget.previousElementSibling;\n        if (values) {\n            this.fillRow(row, values);\n            this.refreshTitle(row);\n        }\n        this.reattach(row);\n        return row;\n    }\n\n    nameInputSuffix(element) {\n        const suffix = this.attributeSuffix(element.name || '');\n        return suffix && suffix.startsWith('[name_attributes]') && suffix.endsWith('[text]') ? suffix : null;\n    }\n\n    refreshTitle(wrapper) {\n        const title = wrapper && wrapper.querySelector('.box-title');\n        if (!title) {\n            return;\n        }\n        let text = '';\n        wrapper.querySelectorAll('input, textarea').forEach(el => {\n            if (!text && this.nameInputSuffix(el) && el.value.trim()) {\n                text = el.value.trim();\n            }\n        });\n        title.textContent = text || this.defaultTitleValue;\n    }\n\n    reattach(element) {\n        if (window.reattachJSAfterAjax) {\n            window.reattachJSAfterAjax($(element));\n        }\n    }\n\n    // The tariff block sits behind a reveal toggle (\"Verschiedene Tarife\n    // anbieten \u2026\") \u2014 make programmatically inserted rows visible.\n    revealIfHidden() {\n        const hiddenAncestor = this.element.closest('.hidden');\n        if (!hiddenAncestor) {\n            return;\n        }\n        const revealContainer = this.element.closest('[data-controller~=\"reveal\"]');\n        const link = revealContainer && revealContainer.querySelector('[data-action*=\"reveal#toggle\"]');\n        if (link) {\n            link.click();\n        }\n    }\n\n    attributeSuffix(name) {\n        const match = name && name.match(/\\[tariffs_attributes\\]\\[[^\\]]+\\](.*)$/);\n        return match && match[1];\n    }\n\n    extractValues(row) {\n        const values = {};\n        row.querySelectorAll('input, select, textarea').forEach(el => {\n            const suffix = this.attributeSuffix(el.name);\n            if (!suffix || suffix === '[key]' || suffix === '[_destroy]') {\n                return;\n            }\n            if (suffix === '[check_prerequisites]') {\n                if (el.type === 'checkbox') {\n                    values[suffix] = el.checked;\n                } else if (!(suffix in values)) {\n                    values[suffix] = el.value === 'true' || el.value === '1';\n                }\n                return;\n            }\n            values[suffix] = el.value;\n            if (suffix === '[product_id]') {\n                let text = el.dataset.valueName || '';\n                try {\n                    const data = $(el).select2('data');\n                    if (data && data.text) {\n                        text = data.text;\n                    }\n                } catch (err) {\n                    // not initialized as select2 (e.g. hidden field of an in-use row)\n                }\n                values['[product_id]:text'] = text;\n            }\n        });\n        return values;\n    }\n\n    fillRow(row, values) {\n        row.querySelectorAll('input, select, textarea').forEach(el => {\n            const suffix = this.attributeSuffix(el.name);\n            if (!suffix || !(suffix in values)) {\n                return;\n            }\n            if (suffix === '[check_prerequisites]') {\n                if (el.type === 'checkbox') {\n                    el.checked = !!values[suffix];\n                }\n                return;\n            }\n            el.value = values[suffix];\n            if (suffix === '[product_id]') {\n                el.setAttribute('data-value-id', values[suffix] || '');\n                el.setAttribute('data-value-name', values['[product_id]:text'] || '');\n            }\n        });\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\n\n// Watches the course/exam type select while CREATING a record (edit forms do\n// not attach this controller: a later type change leaves the tariffs\n// untouched, templates can be pulled via the pricing model form instead).\n// On forms with tariff rows the picked type's templates are fetched into the\n// form so missing fields can be completed before saving; in forms without\n// tariff fields a hidden flag requests the copy on save. Rows already filled\n// in are only replaced after confirmation.\nexport class TariffTemplateCopyController extends Controller {\n\n    static targets = ['select', 'flag'];\n\n    static values = {\n        confirmMessage: String,\n        urlTemplate: String\n    }\n\n    connect() {\n        this.selectTarget.addEventListener('change', () => this.typeChanged());\n    }\n\n    typeChanged() {\n        const rows = this.rowsController();\n        if (rows) {\n            this.copyIntoForm(rows);\n        } else if (this.hasFlagTarget) {\n            this.requestCopyOnSave();\n        }\n    }\n\n    rowsController() {\n        // AJAX modals coexist with the underlying page; stay inside this form.\n        const form = this.element.closest('form');\n        const element = form?.querySelector('[data-controller~=\"tariff-rows\"]');\n        return element && this.application.getControllerForElementAndIdentifier(element, 'tariff-rows');\n    }\n\n    // URL for the currently selected type; null when nothing is selected.\n    currentUrl() {\n        const typeId = this.selectTarget.value;\n        if (!typeId || !this.urlTemplateValue) {\n            return null;\n        }\n        return this.urlTemplateValue.replace('TYPE_ID', typeId);\n    }\n\n    async copyIntoForm(rows) {\n        const url = this.currentUrl();\n        if (!url) {\n            return;\n        }\n        // Picking a type without templates is not asking for templates, so\n        // nothing is replaced and nobody is alerted (unlike the explicit\n        // \"apply templates\" link).\n        if (rows.hasMeaningfulRows()) {\n            bootbox.confirm({\n                message: this.confirmMessageValue,\n                buttons: {\n                    cancel: {label: 'Bestehende behalten', className: 'pull-left'},\n                    confirm: {label: '\u00DCbernehmen', className: 'btn-primary'}\n                },\n                callback: (result) => {\n                    if (result) {\n                        rows.replaceWithTemplates(url, {alertWhenEmpty: false});\n                    }\n                }\n            });\n        } else {\n            rows.replaceWithTemplates(url, {alertWhenEmpty: false});\n        }\n    }\n\n    requestCopyOnSave() {\n        this.flagTarget.value = this.selectTarget.value ? '1' : '';\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\n\n// Convenience tariff select on the backend booking forms: picking a tariff only\n// fills the funding type / product / unit price inputs on the client, nothing\n// else is submitted or persisted.\nexport class TariffSelectController extends Controller {\n\n    static targets = ['select'];\n\n    static values = {\n        fundingSelector: String,\n        productSelector: String,\n        priceSelector: String\n    }\n\n    connect() {\n        this.selectTarget.addEventListener('change', () => this.apply());\n    }\n\n    apply() {\n        const option = this.selectTarget.selectedOptions[0];\n        if (!option || !option.value) {\n            return;\n        }\n        const fundingSelect = document.querySelector(this.fundingSelectorValue);\n        if (fundingSelect) {\n            // Triggering change lets select2 update its display and clears the\n            // dependent product select (see select2_activator), so the product\n            // has to be set afterwards.\n            $(fundingSelect).val(option.dataset.fundingTypeId || '').trigger('change');\n        }\n        const productInput = document.querySelector(this.productSelectorValue);\n        if (productInput) {\n            $(productInput).val(option.dataset.productId || '');\n            try {\n                $(productInput).select2('data', option.dataset.productId ? {\n                    id: option.dataset.productId,\n                    text: option.dataset.productName || ''\n                } : null);\n            } catch (err) {\n                // input not initialized as select2\n            }\n        }\n        const priceInput = document.querySelector(this.priceSelectorValue);\n        if (priceInput) {\n            priceInput.value = option.dataset.unitPrice || '';\n        }\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\n\n// Switches the billing defaults form between \"single price\" (the classic\n// default values) and \"multiple tariffs\". Choosing the single price removes\n// all tariff rows (after confirmation); switching to tariffs keeps the default\n// values untouched so bookings inheriting via calculated_* stay unchanged.\nexport class TariffModeController extends Controller {\n\n    static targets = ['single', 'multiple', 'singleRadio', 'multipleRadio'];\n\n    static values = {\n        confirmMessage: String,\n        singleUnavailableHint: String\n    }\n\n    connect() {\n        this.element.addEventListener('tariff-rows:templates-applied', () => this.showMultiple());\n        if (this.hasUsedTariffs()) {\n            this.singleRadioTarget.disabled = true;\n            const label = this.singleRadioTarget.closest('label');\n            if (label) {\n                label.title = this.singleUnavailableHintValue;\n                label.classList.add('text-muted');\n            }\n        }\n    }\n\n    chooseSingle() {\n        const rows = this.rowsController();\n        if (!rows || !rows.hasMeaningfulRows()) {\n            this.clearTariffs();\n            this.showSingle();\n            return;\n        }\n        bootbox.confirm({\n            message: this.confirmMessageValue,\n            buttons: {\n                cancel: {label: 'Abbrechen', className: 'pull-left'},\n                confirm: {label: 'Tarife entfernen', className: 'btn-primary'}\n            },\n            callback: (result) => {\n                if (result) {\n                    this.clearTariffs();\n                    this.showSingle();\n                } else {\n                    this.multipleRadioTarget.checked = true;\n                }\n            }\n        });\n    }\n\n    chooseMultiple() {\n        this.showMultiple();\n    }\n\n    showSingle() {\n        this.singleTarget.classList.remove('hidden');\n        this.multipleTarget.classList.add('hidden');\n        this.singleRadioTarget.checked = true;\n    }\n\n    showMultiple() {\n        this.multipleTarget.classList.remove('hidden');\n        this.singleTarget.classList.add('hidden');\n        this.multipleRadioTarget.checked = true;\n        const rows = this.rowsController();\n        if (rows && this.visibleWrappers().length === 0) {\n            rows.insertRow();\n        }\n    }\n\n    clearTariffs() {\n        this.wrappers().forEach(wrapper => {\n            if (wrapper.dataset.newRecord === 'true') {\n                wrapper.remove();\n            } else {\n                const destroyFlag = wrapper.querySelector(\"input[name*='_destroy']\");\n                if (destroyFlag) {\n                    destroyFlag.value = '1';\n                }\n                wrapper.style.display = 'none';\n            }\n        });\n    }\n\n    rowsController() {\n        const element = this.element.querySelector('[data-controller~=\"tariff-rows\"]');\n        return element && this.application.getControllerForElementAndIdentifier(element, 'tariff-rows');\n    }\n\n    wrappers() {\n        const rows = this.rowsController();\n        return rows ? Array.from(rows.element.querySelectorAll(rows.wrapperSelectorValue)) : [];\n    }\n\n    visibleWrappers() {\n        return this.wrappers().filter(wrapper => {\n            if (wrapper.style.display === 'none') {\n                return false;\n            }\n            const destroyFlag = wrapper.querySelector(\"input[name*='_destroy']\");\n            return !destroyFlag || destroyFlag.value !== '1';\n        });\n    }\n\n    hasUsedTariffs() {\n        return this.wrappers().some(wrapper => wrapper.dataset.inUse === 'true');\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\n\n// Opens the reservation dialog for the bookings checked in a bookings list.\n//\n// Searches the whole document on purpose: on a person page the course and the exam bookings\n// list sit below each other, and a reservation may mix both types in one run.\nexport class BulkReservationInviteController extends Controller {\n\n    static values = {url: String, emptyMessage: String}\n\n    open(event) {\n        event.preventDefault();\n\n        const composedIds = this.selectedComposedIds();\n        if (composedIds.length === 0) {\n            window.bootbox.alert(this.emptyMessageValue);\n            return;\n        }\n\n        const params = new URLSearchParams({\n            'bulk_reservation_invite[reservable_composed_ids]': composedIds.join(',')\n        });\n        // Bridges into the existing modal-as-JS pipeline (render_modal_as_js).\n        window.jQuery.ajax({url: `${this.urlValue}?${params}`, dataType: 'script'});\n    }\n\n    // The row checkbox is named \"checkbox_\" + dom_id(booking), so its id already carries the\n    // composed_id (\"checkbox_exam_booking_42\").\n    selectedComposedIds() {\n        const checkboxes = document.querySelectorAll('.booking_checkbox:checked, .exam_booking_checkbox:checked');\n        return Array.from(checkboxes)\n            .filter(checkbox => checkbox.offsetParent !== null)\n            .map(checkbox => checkbox.id.replace(/^checkbox_/, ''));\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\n\n// Reports the layout width to the server, so a list can pick its default view for a narrow or a\n// wide screen. Only the browser knows this: a request header describes the device, not the layout,\n// and would be wrong for a resized desktop window.\nexport class DeviceClassController extends Controller {\n\n    static values = {\n        query: {type: String, default: '(max-width: 767px)'},\n        cookieName: {type: String, default: 'device_class'}\n    }\n\n    connect() {\n        this.query = window.matchMedia(this.queryValue);\n        this.report = this.report.bind(this);\n        this.query.addEventListener('change', this.report);\n        this.report();\n    }\n\n    disconnect() {\n        this.query.removeEventListener('change', this.report);\n    }\n\n    report() {\n        const deviceClass = this.query.matches ? 'mobile' : 'desktop';\n        if (this.reported === deviceClass) return;\n        this.reported = deviceClass;\n        const secure = window.location.protocol === 'https:' ? '; Secure' : '';\n        document.cookie = `${this.cookieNameValue}=${deviceClass}; path=/; max-age=31536000; SameSite=Lax${secure}`;\n    }\n\n}\n", "// Collects the filter values of a search form the way the table's json and csv endpoints expect\n// them: the input names are passed through verbatim (\"search_params[name]\"), because the server\n// reads params[:search_params] as a nested hash.\n//\n// With includeBlank the empty fields are collected too, which is what the address bar needs so\n// that clearing a filter also clears it from the url.\nexport function collectSearchParams(form, {includeBlank = false} = {}) {\n    const params = {};\n    if (!form) return params;\n    form.querySelectorAll('input[name^=\"search_params\"], select[name^=\"search_params\"]')\n        .forEach((field) => {\n            if (field.disabled) return;\n            const value = fieldValue(field);\n            if (!includeBlank && value.length === 0) return;\n            params[field.name] = value;\n        });\n    return params;\n}\n\n// A multi select has to yield all of its selections, not just the first one the value property\n// reports.\nfunction fieldValue(field) {\n    if (field.multiple) return Array.from(field.selectedOptions).map((option) => option.value);\n    return field.value;\n}\n", "import {Controller} from '@hotwired/stimulus';\nimport {collectSearchParams} from '../helpers/search_params';\n\n// Adapter for the burnoutable table widget.\n//\n// This is the only place in the application that may talk to the jQuery plugin. Everything else\n// goes through the members below and through the burnoutable-table:changed event, so replacing the\n// widget later means rewriting this file and no view.\nexport class BurnoutableTableController extends Controller {\n\n    static values = {\n        formSelector: String,\n        csvUrl: String,\n        refreshEvents: Array,\n        i18n: Object\n    }\n\n    connect() {\n        this.$element = window.jQuery(this.element);\n        this.onSortingChanged = this.onSortingChanged.bind(this);\n        this.onExternalChange = this.onExternalChange.bind(this);\n\n        // bound before init, because init loads the first page synchronously\n        this.$element.on('burnoutable.changedSorting', this.onSortingChanged);\n        this.$element.burnoutable({\n            i18n: this.hasI18nValue ? this.i18nValue : {},\n            ajax: {data: (params) => Object.assign(params, this.searchParams())}\n        });\n\n        this.$events = window.jQuery(window.EVENTS);\n        this.refreshEventsValue.forEach((name) => this.$events.on(name, this.onExternalChange));\n    }\n\n    disconnect() {\n        this.refreshEventsValue.forEach((name) => this.$events.off(name, this.onExternalChange));\n        this.$element.off('burnoutable.changedSorting', this.onSortingChanged);\n        this.$element.burnoutable('destroy');\n    }\n\n    // --- the seam -----------------------------------------------------------------------------\n\n    get ready() {\n        return Object.keys(this.availableColumns).length > 0;\n    }\n\n    get availableColumns() {\n        return this.$element.burnoutable('getAvailableColumns') || {};\n    }\n\n    get columns() {\n        return (this.$element.burnoutable('getColumns') || []).filter((code) => code !== 'row_functions');\n    }\n\n    get sortedBy() {\n        return this.$element.burnoutable('getSortedBy');\n    }\n\n    get sortDirection() {\n        return this.$element.burnoutable('getSortDirection');\n    }\n\n    // Applies columns and sorting in a single request.\n    setView({columns, sortedBy, sortDirection}) {\n        if (sortedBy !== undefined) {\n            this.$element.burnoutable('setSorting', sortedBy, sortDirection, {defer: true});\n        }\n        this.$element.burnoutable('setColumns', columns === undefined ? this.columns : columns);\n    }\n\n    refresh() {\n        this.$element.burnoutable('refresh');\n    }\n\n    refreshData() {\n        this.$element.burnoutable('refreshData');\n    }\n\n    // Blank fields included on purpose. Leaving them out makes an emptied filter form\n    // indistinguishable from a request that says nothing about filters at all \u2014 and the server\n    // answers the latter with the filters of the saved view, so the filter one just cleared would\n    // come straight back. The marker covers the case where every field is a multi select, whose\n    // empty array would drop out of the query string again.\n    searchParams() {\n        if (!this.form) return {};\n        const params = collectSearchParams(this.form, {includeBlank: true});\n        if (Object.keys(params).length === 0) params.search_params = '';\n        return params;\n    }\n\n    get form() {\n        return this.hasFormSelectorValue ? document.querySelector(this.formSelectorValue) : null;\n    }\n\n    // --- internals ----------------------------------------------------------------------------\n\n    onSortingChanged() {\n        this.announceChange();\n    }\n\n    onExternalChange() {\n        this.refreshData();\n    }\n\n    announceChange() {\n        this.dispatch('changed', {\n            detail: {columns: this.columns, sortedBy: this.sortedBy, sortDirection: this.sortDirection}\n        });\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\n\n// Mirrors horizontal scrolling between two elements, used to keep the sticky table header aligned\n// with the table body.\nexport class ScrollSyncController extends Controller {\n\n    static values = {\n        partner: String\n    }\n\n    connect() {\n        this.sync = this.sync.bind(this);\n        this.element.addEventListener('scroll', this.sync);\n    }\n\n    disconnect() {\n        this.element.removeEventListener('scroll', this.sync);\n    }\n\n    sync() {\n        const partner = document.querySelector(this.partnerValue);\n        // guarded, otherwise the two elements keep waking each other up\n        if (!partner || partner.scrollLeft === this.element.scrollLeft) return;\n        partner.scrollLeft = this.element.scrollLeft;\n    }\n\n}\n", "// Rewrites the given query parameters of a url and leaves every other parameter untouched, so\n// things like preset_id survive a column or filter change. Blank values drop the parameter.\nexport function urlWithReplacedParams(replacements, url = window.location.href) {\n    const parsed = new URL(url, window.location.origin);\n    Object.keys(replacements).forEach((key) => parsed.searchParams.delete(key));\n    Object.entries(replacements).forEach(([key, value]) => {\n        const values = Array.isArray(value) ? value : [value];\n        values.forEach((entry) => {\n            if (entry === undefined || entry === null || entry === '') return;\n            parsed.searchParams.append(key, entry);\n        });\n    });\n    return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n}\n", "import {Controller} from '@hotwired/stimulus';\nimport {urlWithReplacedParams} from '../helpers/url_params';\nimport {collectSearchParams} from '../helpers/search_params';\n\n// The view menu in the footer of a list: switch between saved views, choose columns, export.\n//\n// Talks to the table through the burnoutable-table outlet only. The footer sits in .main-footer and\n// is therefore not an ancestor of the table, which is why this is an outlet and not a child\n// controller.\nexport class SearchViewController extends Controller {\n\n    static outlets = ['burnoutable-table']\n\n    static targets = ['columnPickerTemplate']\n\n    static values = {\n        formSelector: String,\n        csvUrl: String,\n        syncUrl: {type: Boolean, default: false},\n        objectType: String,\n        newViewUrl: String,\n        notReadyMessage: String\n    }\n\n    connect() {\n        // The filter form lives in another content_for block than this footer, so a data-action on\n        // its submit button would never reach here. Listening on the form also covers pressing\n        // Enter in a text filter, which a click listener only catches by accident.\n        this.submit = this.submit.bind(this);\n        if (this.form) this.form.addEventListener('submit', this.submit);\n    }\n\n    disconnect() {\n        if (this.form) this.form.removeEventListener('submit', this.submit);\n    }\n\n    // The table is not a descendant of this footer, so its event is subscribed to here rather than\n    // declared as a data-action in the view.\n    burnoutableTableOutletConnected(outlet, element) {\n        this.tableChanged = this.tableChanged.bind(this);\n        element.addEventListener('burnoutable-table:changed', this.tableChanged);\n        this.syncUrlFromTable();\n    }\n\n    burnoutableTableOutletDisconnected(outlet, element) {\n        element.removeEventListener('burnoutable-table:changed', this.tableChanged);\n    }\n\n    // --- actions ------------------------------------------------------------------------------\n\n    // A real submit would replace the whole query string and drop the columns and the active view.\n    submit(event) {\n        event.preventDefault();\n        this.search();\n    }\n\n    search() {\n        if (!this.hasBurnoutableTableOutlet) return;\n        this.burnoutableTableOutlet.refresh();\n        this.syncUrlFromTable();\n    }\n\n    tableChanged() {\n        this.syncUrlFromTable();\n    }\n\n    openColumnPicker(event) {\n        event.preventDefault();\n        if (!this.hasBurnoutableTableOutlet || !this.hasColumnPickerTemplateTarget) return;\n        const table = this.burnoutableTableOutlet;\n        if (!table.ready) {\n            window.bootbox.alert(this.notReadyMessageValue);\n            return;\n        }\n\n        const picker = this.columnPickerTemplateTarget.content.firstElementChild.cloneNode(true);\n        // set before insertion, so the controller sees them when it connects\n        picker.dataset.columnPickerChoicesValue = JSON.stringify(\n            Object.entries(table.availableColumns).map(([code, meta]) => ({code, label: meta.label}))\n        );\n        picker.dataset.columnPickerSelectedValue = JSON.stringify(table.columns);\n\n        window.createModalAndShow('columnPickerModal', picker.outerHTML, null, null, 'modal-lg');\n        const element = document.getElementById('columnPickerModal');\n        element.addEventListener('column-picker:apply', (applied) => {\n            table.setView({columns: applied.detail.columns});\n            window.jQuery(element).modal('hide');\n            this.syncUrlFromTable();\n        });\n    }\n\n    // Opens the saved view dialog prefilled with what is on screen right now. Built here and not\n    // server side, because the columns may have changed since the page was rendered.\n    saveView(event) {\n        event.preventDefault();\n        if (!this.hasBurnoutableTableOutlet) return;\n        const table = this.burnoutableTableOutlet;\n        const params = new URLSearchParams();\n        const settings = 'search_preset[settings_attributes]';\n\n        // so saving comes back to this list showing the view, instead of reloading into the\n        // columns and filters that are still in the address bar\n        params.append('return_to_list', '1');\n        params.append('search_preset[object_type]', this.objectTypeValue);\n        table.columns.forEach((code) => params.append(`${settings}[columns][]`, code));\n        if (table.sortedBy) params.append(`${settings}[sort_column]`, table.sortedBy);\n        if (table.sortDirection) params.append(`${settings}[sort_direction]`, table.sortDirection);\n\n        Object.entries(collectSearchParams(this.form)).forEach(([name, value]) => {\n            // \"search_params[foo]\" and \"search_params[foo][]\" keep their shape below the settings\n            const key = name.replace(/^search_params/, `${settings}[search_params]`);\n            (Array.isArray(value) ? value : [value]).forEach((entry) => params.append(key, entry));\n        });\n\n        window.jQuery.get(`${this.newViewUrlValue}?${params.toString()}`);\n    }\n\n    // The deleted view must not stay in the address bar, otherwise the reload would look for it.\n    viewDeleted() {\n        window.location.href = urlWithReplacedParams({preset_id: ''});\n    }\n\n    exportCsv(event) {\n        event.preventDefault();\n        if (!this.hasBurnoutableTableOutlet) return;\n        const table = this.burnoutableTableOutlet;\n        let url = urlWithReplacedParams({\n            'columns[]': table.columns,\n            sortedBy: table.sortedBy,\n            sortDirection: table.sortDirection\n        }, this.csvUrlValue);\n        // the same reasoning as in burnoutable-table#searchParams: the export has to state the\n        // filter form, or an emptied one would fall back to the filters of the saved view\n        url = urlWithReplacedParams(table.searchParams(), url);\n        window.location.href = url;\n    }\n\n    // --- url ----------------------------------------------------------------------------------\n\n    // Keeps the address bar in step with what is on screen, so the page can be reloaded or shared.\n    // Unrelated parameters such as preset_id are preserved.\n    syncUrlFromTable() {\n        if (!this.syncUrlValue || !this.hasBurnoutableTableOutlet) return;\n        const table = this.burnoutableTableOutlet;\n        let url = urlWithReplacedParams({\n            'columns[]': table.columns,\n            sorted_by: table.sortedBy,\n            sort_direction: table.sortDirection\n        });\n        url = urlWithReplacedParams(collectSearchParams(this.form, {includeBlank: true}), url);\n        window.history.replaceState({}, null, url);\n    }\n\n    get form() {\n        return this.hasFormSelectorValue ? document.querySelector(this.formSelectorValue) : null;\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\nimport Sortable from 'sortablejs';\n\n// Picks and orders the columns of a table.\n//\n// Used in two places with the same markup: inside the settings modal of a list, where it announces\n// the result with a column-picker:apply event, and inside the form of a saved view, where it keeps\n// hidden inputs up to date. The only difference is whether inputNameValue is set.\n//\n// The available columns are never rendered as a list \u2014 with a few hundred of them that is\n// unusable. They are reachable through the select2 search field only, grouped by the association\n// path their label carries (\"Kurs/Name\").\nexport class ColumnPickerController extends Controller {\n\n    static targets = ['select', 'list', 'empty', 'inputs', 'rowTemplate', 'count']\n\n    static values = {\n        choices: Array,      // [{code, label}]\n        selected: Array,     // [code]\n        inputName: String,\n        placeholder: String\n    }\n\n    connect() {\n        this.buildOptions();\n        this.selectedValue.forEach((code) => this.addRow(code));\n        this.initSelect2();\n        this.initSortable();\n        this.commit();\n    }\n\n    disconnect() {\n        if (this.sortable) {\n            this.sortable.destroy();\n            this.sortable = null;\n        }\n        // the modal empties itself on close, which would orphan the dropdown on <body>\n        window.jQuery(this.selectTarget).select2('destroy');\n    }\n\n    // --- available columns --------------------------------------------------------------------\n\n    buildOptions() {\n        const fragment = document.createDocumentFragment();\n        fragment.appendChild(new Option('', ''));\n        const groups = new Map();\n        const ungrouped = [];\n\n        this.choicesValue.forEach(({code, label}) => {\n            // the row functions column is not a real column, and its label is empty\n            if (code === 'row_functions') return;\n            const cut = label.lastIndexOf('/');\n            const option = new Option(cut === -1 ? label : label.slice(cut + 1), code);\n            option.setAttribute('data-full-label', label);\n            if (cut === -1) {\n                ungrouped.push(option);\n                return;\n            }\n            const name = label.slice(0, cut);\n            if (!groups.has(name)) {\n                const group = document.createElement('optgroup');\n                group.label = name;\n                groups.set(name, group);\n            }\n            groups.get(name).appendChild(option);\n        });\n\n        // the model's own fields first, the associated ones behind them\n        ungrouped.forEach((option) => fragment.appendChild(option));\n        groups.forEach((group) => fragment.appendChild(group));\n        this.selectTarget.innerHTML = '';\n        this.selectTarget.appendChild(fragment);\n    }\n\n    initSelect2() {\n        const $select = window.jQuery(this.selectTarget);\n        $select.select2({\n            width: '100%',                       // the modal is hidden while this runs, so copying it would give 0\n            placeholder: this.placeholderValue,\n            allowClear: false,\n            matcher: (term, text, option) => this.matches(term, text, option)\n        });\n        $select.on('change', () => {\n            const code = $select.val();\n            if (!code) return;\n            this.addRow(code);\n            $select.select2('val', '');\n            this.commit();\n        });\n    }\n\n    // select2 v3 only ever matches the option text, never the label of its optgroup. Without this\n    // a column could not be found by the full name the rest of the application shows.\n    matches(term, text, option) {\n        const full = (option && option.attr && option.attr('data-full-label')) || text;\n        const haystack = this.normalize(full);\n        return this.normalize(term).split(' ').filter(Boolean).every((part) => haystack.includes(part));\n    }\n\n    normalize(value) {\n        return String(value).toLowerCase().replace(/[\\/,\"]/g, ' ').replace(/\\s+/g, ' ').trim();\n    }\n\n    // --- selected columns ---------------------------------------------------------------------\n\n    initSortable() {\n        this.sortable = Sortable.create(this.listTarget, {\n            animation: 150,\n            draggable: 'li',\n            handle: '.column-picker-handle',   // without a handle a finger could not scroll the list\n            delay: 150,\n            delayOnTouchOnly: true,\n            touchStartThreshold: 5,\n            forceFallback: true,               // the ghost has to escape the scrolling modal body\n            fallbackOnBody: true,\n            fallbackTolerance: 3,\n            scroll: true,\n            ghostClass: 'sortable-ghost',\n            dragClass: 'sortable-drag',\n            onEnd: () => this.commit()\n        });\n    }\n\n    addRow(code) {\n        if (this.codes.includes(code)) return;\n        const choice = this.choicesValue.find((candidate) => candidate.code === code);\n        if (!choice) return;\n        const row = this.rowTemplateTarget.content.firstElementChild.cloneNode(true);\n        row.dataset.code = code;\n        row.querySelector('.column-picker-label').textContent = choice.label;\n        this.listTarget.appendChild(row);\n        this.setOptionDisabled(code, true);\n    }\n\n    remove(event) {\n        const row = event.target.closest('li');\n        this.setOptionDisabled(row.dataset.code, false);\n        row.remove();\n        this.commit();\n    }\n\n    moveUp(event) {\n        const row = event.target.closest('li');\n        const previous = row.previousElementSibling;\n        if (!previous) return;\n        this.listTarget.insertBefore(row, previous);\n        this.afterMove(row);\n    }\n\n    moveDown(event) {\n        const row = event.target.closest('li');\n        const next = row.nextElementSibling;\n        if (!next) return;\n        this.listTarget.insertBefore(next, row);\n        this.afterMove(row);\n    }\n\n    reset() {\n        this.listTarget.querySelectorAll('li').forEach((row) => this.setOptionDisabled(row.dataset.code, false));\n        this.listTarget.innerHTML = '';\n        this.commit();\n    }\n\n    apply() {\n        this.dispatch('apply', {detail: {columns: this.codes}, prefix: 'column-picker'});\n    }\n\n    // --- state --------------------------------------------------------------------------------\n\n    get codes() {\n        return Array.from(this.listTarget.querySelectorAll('li')).map((row) => row.dataset.code);\n    }\n\n    afterMove(row) {\n        row.scrollIntoView({block: 'nearest'});\n        this.commit();\n    }\n\n    setOptionDisabled(code, disabled) {\n        const option = this.selectTarget.querySelector(`option[value=\"${CSS.escape(code)}\"]`);\n        if (option) option.disabled = disabled;\n    }\n\n    commit() {\n        const codes = this.codes;\n        if (this.hasEmptyTarget) this.emptyTarget.hidden = codes.length > 0;\n        if (this.hasCountTarget) this.countTarget.textContent = codes.length;\n        if (!this.hasInputsTarget || !this.hasInputNameValue) return;\n        this.inputsTarget.innerHTML = '';\n        codes.forEach((code) => {\n            const input = document.createElement('input');\n            input.type = 'hidden';\n            input.name = this.inputNameValue;\n            input.value = code;\n            this.inputsTarget.appendChild(input);\n        });\n    }\n\n}\n", "/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n *   return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n", "import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n *   return constructFrom(\n *     date, // Use constructor from the given date\n *     date.getTime() // Use the date value to create a new date\n *   );\n * }\n */\nexport function constructFrom(date, value) {\n  if (typeof date === \"function\") return date(value);\n\n  if (date && typeof date === \"object\" && constructFromSymbol in date)\n    return date[constructFromSymbol](value);\n\n  if (date instanceof Date) return new date.constructor(value);\n\n  return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n", "import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n  // [TODO] Get rid of `toDate` or `constructFrom`?\n  return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n", "import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n\n  // If 0 days, no-op to avoid changing times in the hour before end of DST\n  if (!amount) return _date;\n\n  _date.setDate(_date.getDate() + amount);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n", "import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n  if (!amount) {\n    // If 0 months, no-op to avoid changing times in the hour before end of DST\n    return _date;\n  }\n  const dayOfMonth = _date.getDate();\n\n  // The JS Date object supports date math by accepting out-of-bounds values for\n  // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n  // new Date(2020, 13, 1) returns 1 Feb 2021.  This is *almost* the behavior we\n  // want except that dates will wrap around the end of a month, meaning that\n  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n  // we'll default to the end of the desired month by adding 1 to the desired\n  // month and using a date of 0 to back up one day to the end of the desired\n  // month.\n  const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n  endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n  const daysInMonth = endOfDesiredMonth.getDate();\n  if (dayOfMonth >= daysInMonth) {\n    // If we're already at the end of the month, then this is the correct date\n    // and we're done.\n    return endOfDesiredMonth;\n  } else {\n    // Otherwise, we now know that setting the original day-of-month value won't\n    // cause an overflow, so set the desired day-of-month. Note that we can't\n    // just set the date of `endOfDesiredMonth` because that object may have had\n    // its time changed in the unusual case where where a DST transition was on\n    // the last day of the month and its local time was in the hour skipped or\n    // repeated next to a DST transition.  So we use `date` instead which is\n    // guaranteed to still have the original time.\n    _date.setFullYear(\n      endOfDesiredMonth.getFullYear(),\n      endOfDesiredMonth.getMonth(),\n      dayOfMonth,\n    );\n    return _date;\n  }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n", "let defaultOptions = {};\n\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}\n", "import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date, options?.in);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n  _date.setDate(_date.getDate() - diff);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n", "import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n  return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n", "import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n\n  const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n  const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n  if (_date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (_date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n", "import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n  const _date = toDate(date);\n  const utcDate = new Date(\n    Date.UTC(\n      _date.getFullYear(),\n      _date.getMonth(),\n      _date.getDate(),\n      _date.getHours(),\n      _date.getMinutes(),\n      _date.getSeconds(),\n      _date.getMilliseconds(),\n    ),\n  );\n  utcDate.setUTCFullYear(_date.getFullYear());\n  return +date - +utcDate;\n}\n", "import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n  const normalize = constructFrom.bind(\n    null,\n    context || dates.find((date) => typeof date === \"object\"),\n  );\n  return dates.map(normalize);\n}\n", "import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n  const _date = toDate(date, options?.in);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n", "import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n  const [laterDate_, earlierDate_] = normalizeDates(\n    options?.in,\n    laterDate,\n    earlierDate,\n  );\n\n  const laterStartOfDay = startOfDay(laterDate_);\n  const earlierStartOfDay = startOfDay(earlierDate_);\n\n  const laterTimestamp =\n    +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n  const earlierTimestamp =\n    +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n  // Round the number of days to the nearest integer because the number of\n  // milliseconds in a day is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n", "import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n  const year = getISOWeekYear(date, options);\n  const fourthOfJanuary = constructFrom(options?.in || date, 0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n", "import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link addWeeks} function options.\n */\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of weeks to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be added.\n * @param options - An object with options\n *\n * @returns The new date with the weeks added\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport function addWeeks(date, amount, options) {\n  return addDays(date, amount * 7, options);\n}\n\n// Fallback for modularized imports:\nexport default addWeeks;\n", "import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n  return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n", "/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n  return (\n    value instanceof Date ||\n    (typeof value === \"object\" &&\n      Object.prototype.toString.call(value) === \"[object Date]\")\n  );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n", "import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n  return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n", "import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMonth} function options.\n */\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  const month = _date.getMonth();\n  _date.setFullYear(_date.getFullYear(), month + 1, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n", "import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfQuarter} function options.\n */\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a quarter\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport function startOfQuarter(date, options) {\n  const _date = toDate(date, options?.in);\n  const currentMonth = _date.getMonth();\n  const month = currentMonth - (currentMonth % 3);\n  _date.setMonth(month, 1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfQuarter;\n", "import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date, options) {\n  const _date = toDate(date, options?.in);\n  _date.setDate(1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n", "import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfYear} function options.\n */\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The end of a year\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport function endOfYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n  _date.setFullYear(year + 1, 0, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfYear;\n", "import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n  const date_ = toDate(date, options?.in);\n  date_.setFullYear(date_.getFullYear(), 0, 1);\n  date_.setHours(0, 0, 0, 0);\n  return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n", "import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfWeek} function options.\n */\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date, options?.in);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n  _date.setDate(_date.getDate() + diff);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfWeek;\n", "import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfQuarter} function options.\n */\n\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a quarter\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfQuarter(date, options) {\n  const _date = toDate(date, options?.in);\n  const currentMonth = _date.getMonth();\n  const month = currentMonth - (currentMonth % 3) + 3;\n  _date.setMonth(month, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfQuarter;\n", "const formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: \"less than a second\",\n    other: \"less than {{count}} seconds\",\n  },\n\n  xSeconds: {\n    one: \"1 second\",\n    other: \"{{count}} seconds\",\n  },\n\n  halfAMinute: \"half a minute\",\n\n  lessThanXMinutes: {\n    one: \"less than a minute\",\n    other: \"less than {{count}} minutes\",\n  },\n\n  xMinutes: {\n    one: \"1 minute\",\n    other: \"{{count}} minutes\",\n  },\n\n  aboutXHours: {\n    one: \"about 1 hour\",\n    other: \"about {{count}} hours\",\n  },\n\n  xHours: {\n    one: \"1 hour\",\n    other: \"{{count}} hours\",\n  },\n\n  xDays: {\n    one: \"1 day\",\n    other: \"{{count}} days\",\n  },\n\n  aboutXWeeks: {\n    one: \"about 1 week\",\n    other: \"about {{count}} weeks\",\n  },\n\n  xWeeks: {\n    one: \"1 week\",\n    other: \"{{count}} weeks\",\n  },\n\n  aboutXMonths: {\n    one: \"about 1 month\",\n    other: \"about {{count}} months\",\n  },\n\n  xMonths: {\n    one: \"1 month\",\n    other: \"{{count}} months\",\n  },\n\n  aboutXYears: {\n    one: \"about 1 year\",\n    other: \"about {{count}} years\",\n  },\n\n  xYears: {\n    one: \"1 year\",\n    other: \"{{count}} years\",\n  },\n\n  overXYears: {\n    one: \"over 1 year\",\n    other: \"over {{count}} years\",\n  },\n\n  almostXYears: {\n    one: \"almost 1 year\",\n    other: \"almost {{count}} years\",\n  },\n};\n\nexport const formatDistance = (token, count, options) => {\n  let result;\n\n  const tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === \"string\") {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace(\"{{count}}\", count.toString());\n  }\n\n  if (options?.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return \"in \" + result;\n    } else {\n      return result + \" ago\";\n    }\n  }\n\n  return result;\n};\n", "export function buildFormatLongFn(args) {\n  return (options = {}) => {\n    // TODO: Remove String()\n    const width = options.width ? String(options.width) : args.defaultWidth;\n    const format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}\n", "import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n  full: \"EEEE, MMMM do, y\",\n  long: \"MMMM do, y\",\n  medium: \"MMM d, y\",\n  short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n  full: \"h:mm:ss a zzzz\",\n  long: \"h:mm:ss a z\",\n  medium: \"h:mm:ss a\",\n  short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: \"{{date}}, {{time}}\",\n  short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: \"full\",\n  }),\n\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: \"full\",\n  }),\n\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: \"full\",\n  }),\n};\n", "const formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n  formatRelativeLocale[token];\n", "/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n  return (value, options) => {\n    const context = options?.context ? String(options.context) : \"standalone\";\n\n    let valuesArray;\n    if (context === \"formatting\" && args.formattingValues) {\n      const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      const width = options?.width ? String(options.width) : defaultWidth;\n\n      valuesArray =\n        args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      const defaultWidth = args.defaultWidth;\n      const width = options?.width ? String(options.width) : args.defaultWidth;\n\n      valuesArray = args.values[width] || args.values[defaultWidth];\n    }\n    const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n    // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n    return valuesArray[index];\n  };\n}\n", "import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n  narrow: [\"B\", \"A\"],\n  abbreviated: [\"BC\", \"AD\"],\n  wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n  narrow: [\"1\", \"2\", \"3\", \"4\"],\n  abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n  wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n  narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n  abbreviated: [\n    \"Jan\",\n    \"Feb\",\n    \"Mar\",\n    \"Apr\",\n    \"May\",\n    \"Jun\",\n    \"Jul\",\n    \"Aug\",\n    \"Sep\",\n    \"Oct\",\n    \"Nov\",\n    \"Dec\",\n  ],\n\n  wide: [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\",\n  ],\n};\n\nconst dayValues = {\n  narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n  short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n  abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  wide: [\n    \"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\",\n  ],\n};\n\nconst dayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n};\n\nconst formattingDayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n  const number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  const rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + \"st\";\n      case 2:\n        return number + \"nd\";\n      case 3:\n        return number + \"rd\";\n    }\n  }\n  return number + \"th\";\n};\n\nexport const localize = {\n  ordinalNumber,\n\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: \"wide\",\n  }),\n\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: \"wide\",\n    argumentCallback: (quarter) => quarter - 1,\n  }),\n\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: \"wide\",\n  }),\n\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: \"wide\",\n  }),\n\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: \"wide\",\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: \"wide\",\n  }),\n};\n", "export function buildMatchFn(args) {\n  return (string, options = {}) => {\n    const width = options.width;\n\n    const matchPattern =\n      (width && args.matchPatterns[width]) ||\n      args.matchPatterns[args.defaultMatchWidth];\n    const matchResult = string.match(matchPattern);\n\n    if (!matchResult) {\n      return null;\n    }\n    const matchedString = matchResult[0];\n\n    const parsePatterns =\n      (width && args.parsePatterns[width]) ||\n      args.parsePatterns[args.defaultParseWidth];\n\n    const key = Array.isArray(parsePatterns)\n      ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n      : // [TODO] -- I challenge you to fix the type\n        findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n    let value;\n\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback\n      ? // [TODO] -- I challenge you to fix the type\n        options.valueCallback(value)\n      : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n\nfunction findKey(object, predicate) {\n  for (const key in object) {\n    if (\n      Object.prototype.hasOwnProperty.call(object, key) &&\n      predicate(object[key])\n    ) {\n      return key;\n    }\n  }\n  return undefined;\n}\n\nfunction findIndex(array, predicate) {\n  for (let key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\n", "export function buildMatchPatternFn(args) {\n  return (string, options = {}) => {\n    const matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    const matchedString = matchResult[0];\n\n    const parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    let value = args.valueCallback\n      ? args.valueCallback(parseResult[0])\n      : parseResult[0];\n\n    // [TODO] I challenge you to fix the type\n    value = options.valueCallback ? options.valueCallback(value) : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n", "import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n  narrow: [\n    /^j/i,\n    /^f/i,\n    /^m/i,\n    /^a/i,\n    /^m/i,\n    /^j/i,\n    /^j/i,\n    /^a/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n\n  any: [\n    /^ja/i,\n    /^f/i,\n    /^mar/i,\n    /^ap/i,\n    /^may/i,\n    /^jun/i,\n    /^jul/i,\n    /^au/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n};\n\nconst matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i,\n  },\n};\n\nexport const match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: (value) => parseInt(value, 10),\n  }),\n\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: \"any\",\n    valueCallback: (index) => index + 1,\n  }),\n\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: \"any\",\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: \"any\",\n  }),\n};\n", "import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n  code: \"en-US\",\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1,\n  },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n", "import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = differenceInCalendarDays(_date, startOfYear(_date));\n  const dayOfYear = diff + 1;\n  return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n", "import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n", "import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n  const _date = toDate(date, options?.in);\n  const year = _date.getFullYear();\n\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n  const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n  if (+_date >= +startOfNextYear) {\n    return year + 1;\n  } else if (+_date >= +startOfThisYear) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n", "import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const year = getWeekYear(date, options);\n  const firstWeek = constructFrom(options?.in || date, 0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  const _date = startOfWeek(firstWeek, options);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n", "import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n  const _date = toDate(date, options?.in);\n  const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n", "export function addLeadingZeros(number, targetLength) {\n  const sign = number < 0 ? \"-\" : \"\";\n  const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n  return sign + output;\n}\n", "import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* |                                |\n * |  d  | Day of month                   |  D  |                                |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  m  | Minute                         |  M  | Month                          |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  y  | Year (abs)                     |  Y  |                                |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n  // Year\n  y(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    const signedYear = date.getFullYear();\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n  },\n\n  // Month\n  M(date, token) {\n    const month = date.getMonth();\n    return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n\n  // Day of the month\n  d(date, token) {\n    return addLeadingZeros(date.getDate(), token.length);\n  },\n\n  // AM or PM\n  a(date, token) {\n    const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return dayPeriodEnumValue.toUpperCase();\n      case \"aaa\":\n        return dayPeriodEnumValue;\n      case \"aaaaa\":\n        return dayPeriodEnumValue[0];\n      case \"aaaa\":\n      default:\n        return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n    }\n  },\n\n  // Hour [1-12]\n  h(date, token) {\n    return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n  },\n\n  // Hour [0-23]\n  H(date, token) {\n    return addLeadingZeros(date.getHours(), token.length);\n  },\n\n  // Minute\n  m(date, token) {\n    return addLeadingZeros(date.getMinutes(), token.length);\n  },\n\n  // Second\n  s(date, token) {\n    return addLeadingZeros(date.getSeconds(), token.length);\n  },\n\n  // Fraction of second\n  S(date, token) {\n    const numberOfDigits = token.length;\n    const milliseconds = date.getMilliseconds();\n    const fractionalSeconds = Math.trunc(\n      milliseconds * Math.pow(10, numberOfDigits - 3),\n    );\n    return addLeadingZeros(fractionalSeconds, token.length);\n  },\n};\n", "import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n  am: \"am\",\n  pm: \"pm\",\n  midnight: \"midnight\",\n  noon: \"noon\",\n  morning: \"morning\",\n  afternoon: \"afternoon\",\n  evening: \"evening\",\n  night: \"night\",\n};\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n  // Era\n  G: function (date, token, localize) {\n    const era = date.getFullYear() > 0 ? 1 : 0;\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return localize.era(era, { width: \"abbreviated\" });\n      // A, B\n      case \"GGGGG\":\n        return localize.era(era, { width: \"narrow\" });\n      // Anno Domini, Before Christ\n      case \"GGGG\":\n      default:\n        return localize.era(era, { width: \"wide\" });\n    }\n  },\n\n  // Year\n  y: function (date, token, localize) {\n    // Ordinal number\n    if (token === \"yo\") {\n      const signedYear = date.getFullYear();\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      const year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, { unit: \"year\" });\n    }\n\n    return lightFormatters.y(date, token);\n  },\n\n  // Local week-numbering year\n  Y: function (date, token, localize, options) {\n    const signedWeekYear = getWeekYear(date, options);\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n    // Two digit year\n    if (token === \"YY\") {\n      const twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    }\n\n    // Ordinal number\n    if (token === \"Yo\") {\n      return localize.ordinalNumber(weekYear, { unit: \"year\" });\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length);\n  },\n\n  // ISO week-numbering year\n  R: function (date, token) {\n    const isoWeekYear = getISOWeekYear(date);\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length);\n  },\n\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function (date, token) {\n    const year = date.getFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n\n  // Quarter\n  Q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"QQ\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"Qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"QQQ\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"QQQQQ\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"QQQQ\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone quarter\n  q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"qq\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"qqq\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"qqqqq\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"qqqq\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // Month\n  M: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      case \"M\":\n      case \"MM\":\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n      case \"Mo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"MMM\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // J, F, ..., D\n      case \"MMMMM\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // January, February, ..., December\n      case \"MMMM\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"formatting\" });\n    }\n  },\n\n  // Stand-alone month\n  L: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return String(month + 1);\n      // 01, 02, ..., 12\n      case \"LL\":\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n      case \"Lo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"LLL\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // J, F, ..., D\n      case \"LLLLL\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // January, February, ..., December\n      case \"LLLL\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"standalone\" });\n    }\n  },\n\n  // Local week of year\n  w: function (date, token, localize, options) {\n    const week = getWeek(date, options);\n\n    if (token === \"wo\") {\n      return localize.ordinalNumber(week, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(week, token.length);\n  },\n\n  // ISO week of year\n  I: function (date, token, localize) {\n    const isoWeek = getISOWeek(date);\n\n    if (token === \"Io\") {\n      return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(isoWeek, token.length);\n  },\n\n  // Day of the month\n  d: function (date, token, localize) {\n    if (token === \"do\") {\n      return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n    }\n\n    return lightFormatters.d(date, token);\n  },\n\n  // Day of year\n  D: function (date, token, localize) {\n    const dayOfYear = getDayOfYear(date);\n\n    if (token === \"Do\") {\n      return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n    }\n\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n\n  // Day of week\n  E: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"EEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"EEEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"EEEE\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Local day of week\n  e: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case \"e\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"ee\":\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n      case \"eo\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"eee\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"eeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"eeeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"eeee\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone local day of week\n  c: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case \"c\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"cc\":\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n      case \"co\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"ccc\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // T\n      case \"ccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // Tu\n      case \"cccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"standalone\",\n        });\n      // Tuesday\n      case \"cccc\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // ISO day of week\n  i: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n    switch (token) {\n      // 2\n      case \"i\":\n        return String(isoDayOfWeek);\n      // 02\n      case \"ii\":\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n      case \"io\":\n        return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n      // Tue\n      case \"iii\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"iiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"iiiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"iiii\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM or PM\n  a: function (date, token, localize) {\n    const hours = date.getHours();\n    const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"aaa\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"aaaaa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"aaaa\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM, PM, midnight, noon\n  b: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon;\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight;\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n    }\n\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"bbb\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"bbbbb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"bbbb\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // in the morning, in the afternoon, in the evening, at night\n  B: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening;\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon;\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning;\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night;\n    }\n\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"BBBBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"BBBB\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Hour [1-12]\n  h: function (date, token, localize) {\n    if (token === \"ho\") {\n      let hours = date.getHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return lightFormatters.h(date, token);\n  },\n\n  // Hour [0-23]\n  H: function (date, token, localize) {\n    if (token === \"Ho\") {\n      return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n    }\n\n    return lightFormatters.H(date, token);\n  },\n\n  // Hour [0-11]\n  K: function (date, token, localize) {\n    const hours = date.getHours() % 12;\n\n    if (token === \"Ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Hour [1-24]\n  k: function (date, token, localize) {\n    let hours = date.getHours();\n    if (hours === 0) hours = 24;\n\n    if (token === \"ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Minute\n  m: function (date, token, localize) {\n    if (token === \"mo\") {\n      return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n    }\n\n    return lightFormatters.m(date, token);\n  },\n\n  // Second\n  s: function (date, token, localize) {\n    if (token === \"so\") {\n      return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n    }\n\n    return lightFormatters.s(date, token);\n  },\n\n  // Fraction of second\n  S: function (date, token) {\n    return lightFormatters.S(date, token);\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    if (timezoneOffset === 0) {\n      return \"Z\";\n    }\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"X\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case \"XXXX\":\n      case \"XX\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case \"XXXXX\":\n      case \"XXX\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"x\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case \"xxxx\":\n      case \"xx\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case \"xxxxx\":\n      case \"xxx\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (GMT)\n  O: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"O\":\n      case \"OO\":\n      case \"OOO\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"OOOO\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (specific non-location)\n  z: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"z\":\n      case \"zz\":\n      case \"zzz\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"zzzz\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Seconds timestamp\n  t: function (date, token, _localize) {\n    const timestamp = Math.trunc(+date / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n\n  // Milliseconds timestamp\n  T: function (date, token, _localize) {\n    return addLeadingZeros(+date, token.length);\n  },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = Math.trunc(absOffset / 60);\n  const minutes = absOffset % 60;\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n  if (offset % 60 === 0) {\n    const sign = offset > 0 ? \"-\" : \"+\";\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n  return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n  const minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}\n", "const dateLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"P\":\n      return formatLong.date({ width: \"short\" });\n    case \"PP\":\n      return formatLong.date({ width: \"medium\" });\n    case \"PPP\":\n      return formatLong.date({ width: \"long\" });\n    case \"PPPP\":\n    default:\n      return formatLong.date({ width: \"full\" });\n  }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"p\":\n      return formatLong.time({ width: \"short\" });\n    case \"pp\":\n      return formatLong.time({ width: \"medium\" });\n    case \"ppp\":\n      return formatLong.time({ width: \"long\" });\n    case \"pppp\":\n    default:\n      return formatLong.time({ width: \"full\" });\n  }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n  const matchResult = pattern.match(/(P+)(p+)?/) || [];\n  const datePattern = matchResult[1];\n  const timePattern = matchResult[2];\n\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n\n  let dateTimeFormat;\n\n  switch (datePattern) {\n    case \"P\":\n      dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n      break;\n    case \"PP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n      break;\n    case \"PPP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n      break;\n    case \"PPPP\":\n    default:\n      dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n      break;\n  }\n\n  return dateTimeFormat\n    .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n    .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter,\n};\n", "const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n  return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n  return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n  const _message = message(token, format, input);\n  console.warn(_message);\n  if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n  const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n  return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n", "import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n  isProtectedDayOfYearToken,\n  isProtectedWeekYearToken,\n  warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n  /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > \u26A0\uFE0F Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          | a..aa   | AM, PM                            |       |\n * |                                 | aaa     | am, pm                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |\n * |                                 | bbb     | am, pm, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 001, ..., 999                |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 04/29/1453                        | 7     |\n * |                                 | PP      | Apr 29, 1453                      | 7     |\n * |                                 | PPP     | April 29th, 1453                  | 7     |\n * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |\n * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n *    and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n  const defaultOptions = getDefaultOptions();\n  const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const originalDate = toDate(date, options?.in);\n\n  if (!isValid(originalDate)) {\n    throw new RangeError(\"Invalid time value\");\n  }\n\n  let parts = formatStr\n    .match(longFormattingTokensRegExp)\n    .map((substring) => {\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n        const longFormatter = longFormatters[firstCharacter];\n        return longFormatter(substring, locale.formatLong);\n      }\n      return substring;\n    })\n    .join(\"\")\n    .match(formattingTokensRegExp)\n    .map((substring) => {\n      // Replace two single quote characters with one single quote character\n      if (substring === \"''\") {\n        return { isToken: false, value: \"'\" };\n      }\n\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"'\") {\n        return { isToken: false, value: cleanEscapedString(substring) };\n      }\n\n      if (formatters[firstCharacter]) {\n        return { isToken: true, value: substring };\n      }\n\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError(\n          \"Format string contains an unescaped latin alphabet character `\" +\n            firstCharacter +\n            \"`\",\n        );\n      }\n\n      return { isToken: false, value: substring };\n    });\n\n  // invoke localize preprocessor (only for french locales at the moment)\n  if (locale.localize.preprocessor) {\n    parts = locale.localize.preprocessor(originalDate, parts);\n  }\n\n  const formatterOptions = {\n    firstWeekContainsDate,\n    weekStartsOn,\n    locale,\n  };\n\n  return parts\n    .map((part) => {\n      if (!part.isToken) return part.value;\n\n      const token = part.value;\n\n      if (\n        (!options?.useAdditionalWeekYearTokens &&\n          isProtectedWeekYearToken(token)) ||\n        (!options?.useAdditionalDayOfYearTokens &&\n          isProtectedDayOfYearToken(token))\n      ) {\n        warnOrThrowProtectedError(token, formatStr, String(date));\n      }\n\n      const formatter = formatters[token[0]];\n      return formatter(originalDate, token, locale.localize, formatterOptions);\n    })\n    .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n  const matched = input.match(escapedStringRegExp);\n\n  if (!matched) {\n    return input;\n  }\n\n  return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n", "import {Controller} from '@hotwired/stimulus';\nimport {addDays, addWeeks, addMonths, addYears,\n        startOfWeek, endOfWeek, startOfMonth, endOfMonth,\n        startOfQuarter, endOfQuarter, startOfYear, endOfYear} from 'date-fns';\nimport {Datepicker} from 'vanillajs-datepicker';\nimport {dateFormatFor} from '../components/datepicker/locales';\n\n// Switches one date filter of a saved view between a fixed date and one that moves with the\n// calendar, and shows what the setting means today.\n//\n// Only a preview: the value itself is resolved on the server when the view is applied, because the\n// searches expect a plain date and the reference day has to be the business one.\nexport class RelativeDateController extends Controller {\n\n    static targets = ['toggle', 'controls', 'anchor', 'direction', 'amount', 'unit', 'preview']\n\n    static values = {\n        today: String,       // the server's business day, so preview and result cannot disagree\n        locale: String,\n        preview: String,     // \"Ergibt heute: %{date}\"\n        fieldName: String,\n        anchorUnits: Object  // the unit an anchor is naturally counted in\n    }\n\n    connect() {\n        this.literalField = document.querySelector(`[name=\"search_preset[settings_attributes][search_params][${this.fieldNameValue}]\"]`);\n        this.apply();\n    }\n\n    toggle() {\n        this.apply();\n    }\n\n    apply() {\n        const relative = this.toggleTarget.checked;\n        this.controlsTarget.hidden = !relative;\n        // A disabled control is not submitted, so the saved view carries only what applies. The\n        // literal field is disabled rather than removed, so switching back keeps its value.\n        this.controls.forEach((field) => { field.disabled = !relative; });\n        if (this.literalField) this.literalField.disabled = relative;\n        if (relative) this.preview();\n    }\n\n    get controls() {\n        return [this.anchorTarget, this.directionTarget, this.amountTarget, this.unitTarget];\n    }\n\n    // Choosing a period anchor picks the unit that period is counted in, so \"start of month minus\n    // 1\" needs one click instead of three.\n    anchorChanged() {\n        const unit = this.anchorUnitsValue[this.anchorTarget.value];\n        if (unit) this.unitTarget.value = unit;\n        this.preview();\n    }\n\n    preview() {\n        const [year, month, day] = this.todayValue.split('-').map(Number);\n        const shifted = this.shift(new Date(year, month - 1, day));\n        const result = this.anchorDate(shifted);\n        // The datepicker's own format, not the strftime pattern Ruby uses \u2014 and the same one the\n        // fixed date field renders with, so the two cannot read differently.\n        this.previewTarget.textContent =\n            this.previewValue.replace('%{date}', Datepicker.formatDate(result, dateFormatFor(this.localeValue)));\n    }\n\n    // The offset moves the reference day first, the anchor is applied afterwards. The other order\n    // is wrong at month boundaries: the end of November is the 30th, and a month before that is the\n    // 30th of October, although October ends on the 31st.\n    shift(date) {\n        const magnitude = Math.abs(parseInt(this.amountTarget.value, 10) || 0);\n        const amount = this.directionTarget.value === 'minus' ? -magnitude : magnitude;\n        switch (this.unitTarget.value) {\n            case 'weeks': return addWeeks(date, amount);\n            case 'months': return addMonths(date, amount);\n            case 'quarters': return addMonths(date, amount * 3);\n            case 'years': return addYears(date, amount);\n            default: return addDays(date, amount);\n        }\n    }\n\n    anchorDate(date) {\n        switch (this.anchorTarget.value) {\n            case 'week_start': return startOfWeek(date, {weekStartsOn: 1});\n            case 'week_end': return endOfWeek(date, {weekStartsOn: 1});\n            case 'month_start': return startOfMonth(date);\n            case 'month_end': return endOfMonth(date);\n            case 'quarter_start': return startOfQuarter(date);\n            case 'quarter_end': return endOfQuarter(date);\n            case 'year_start': return startOfYear(date);\n            case 'year_end': return endOfYear(date);\n            default: return date;\n        }\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\n\n// Keeps the header row of a table visible while scrolling past it, by moving it into a container\n// that sits in the fixed page header and back again.\n//\n// Used by the tables embedded in a show page. The list pages get their sticky header from the\n// layout instead.\nexport class StickyTableHeaderController extends Controller {\n\n    static values = {\n        header: String,                                       // the row that travels\n        normal: String,                                       // where it lives while the table is in view\n        fixed: String,                                        // where it goes once the table scrolls away\n        anchor: {type: String, default: '.content-header-fixed'}\n    }\n\n    connect() {\n        this.reposition = this.reposition.bind(this);\n        window.addEventListener('scroll', this.reposition, {passive: true});\n        this.reposition();\n    }\n\n    disconnect() {\n        window.removeEventListener('scroll', this.reposition);\n    }\n\n    reposition() {\n        const header = document.querySelector(this.headerValue);\n        const normal = document.querySelector(this.normalValue);\n        const fixed = document.querySelector(this.fixedValue);\n        if (!header || !normal || !fixed) return;\n\n        const anchor = document.querySelector(this.anchorValue);\n        const anchorHeight = anchor ? anchor.offsetHeight : 0;\n        const distance = this.element.getBoundingClientRect().top - header.offsetHeight - anchorHeight;\n        const target = distance < 0 ? fixed : normal;\n        if (header.parentElement !== target) target.appendChild(header);\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\nimport {handleAjaxError} from '../components/ajax_error_handling';\n\n// Loads a fragment after the page has rendered and writes it into this element. Keeps optional or\n// slow content (e.g. a lookup at an external service) out of the initial page render.\n//\n// Failures go through the application's usual ajax error handling. Set ignoreErrors for content the\n// page does not depend on: a fragment that cannot be built right now then leaves the element empty\n// instead of interrupting the user on every page view.\nexport class LazyLoadingController extends Controller {\n\n    static values = {url: String, ignoreErrors: Boolean}\n\n    connect() {\n        fetch(this.urlValue, {\n            credentials: 'same-origin',\n            headers: {'Accept': 'text/html', 'X-Requested-With': 'XMLHttpRequest'}\n        }).then(response => response.text().then(body => {\n            if (response.ok) {\n                this.element.innerHTML = body;\n            } else {\n                this.failed(response, body);\n            }\n        })).catch(error => this.failed(null, '', error));\n    }\n\n    // The error handling is shared with the jQuery side, which only knows XMLHttpRequest.\n    failed(response, body, error) {\n        this.element.innerHTML = '';\n        if (this.ignoreErrorsValue) {\n            return;\n        }\n        handleAjaxError({\n            status: response ? response.status : 0,\n            statusText: response ? response.statusText : '',\n            responseText: body,\n            getResponseHeader: name => response && response.headers.get(name)\n        }, error);\n    }\n\n}\n", "import {Controller} from '@hotwired/stimulus';\nimport {format} from 'date-fns';\nimport {Datepicker} from 'vanillajs-datepicker';\nimport {dateFormatFor} from '../components/datepicker/locales';\n\n// The strftime directives of prefix and postfix the preview resolves, as date-fns patterns. Any\n// other directive stays as typed, so the preview shows \"%B\" instead of a plausible wrong number.\nconst DATE_PATTERNS_BY_DIRECTIVE = {Y: 'yyyy', y: 'yy', m: 'MM', d: 'dd'};\n\n// Shows the number a range issues next while its form is being filled in, built the way\n// NumberRange#next_preview builds it. Everything happens in the browser, so looking at the preview\n// never uses up a number.\nexport class NumberRangePreviewController extends Controller {\n\n    static targets = ['validFrom', 'validTo', 'nextNumber', 'prefix', 'postfix', 'padZeros', 'preview']\n\n    static values = {\n        today: String,   // the server's business day\n        locale: String\n    }\n\n    connect() {\n        this.update();\n    }\n\n    update() {\n        this.previewTarget.value = this.nextPreview(this.issueDate());\n    }\n\n    nextPreview(date) {\n        const nextNumber = parseInt(this.nextNumberTarget.value, 10);\n        if (isNaN(nextNumber)) return '';\n        const padZeros = parseInt(this.padZerosTarget.value, 10) || 0;\n        return this.strftime(this.prefixTarget.value, date) +\n            String(nextNumber).padStart(padZeros, '0') +\n            this.strftime(this.postfixTarget.value, date);\n    }\n\n    // Today, or the nearest day the range is valid on. A range prepared for next year would\n    // otherwise show this year in \"RE-%Y-\", and next_preview refuses a day outside the validity.\n    issueDate() {\n        const today = Datepicker.parseDate(this.todayValue, 'yyyy-mm-dd');\n        const validFrom = this.parseDate(this.validFromTarget.value);\n        const validTo = this.parseDate(this.validToTarget.value);\n        if (validFrom && validFrom > today) return validFrom;\n        if (validTo && validTo < today) return validTo;\n        return today;\n    }\n\n    // Datepicker.parseDate is lenient: \"31.12.202\" is the year 202, \"abc\" is today and the 31st of\n    // February lands in March. Only text that reads back unchanged counts, anything else is left out\n    // until the datepicker has corrected it on leaving the field.\n    parseDate(text) {\n        const date = Datepicker.parseDate(text, this.dateFormat);\n        if (date && Datepicker.formatDate(date, this.dateFormat) === text) return date;\n    }\n\n    // Stripped like every string column on save, so a blank prefix adds nothing, as in the model.\n    strftime(pattern, date) {\n        return pattern.trim().replace(/%(.)/g, (directive, letter) => {\n            const datePattern = DATE_PATTERNS_BY_DIRECTIVE[letter];\n            return datePattern ? format(date, datePattern) : directive;\n        });\n    }\n\n    get dateFormat() {\n        return dateFormatFor(this.localeValue);\n    }\n\n}\n"],
  "mappings": "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AAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,QAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,QAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,K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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
  "names": ["_typeof", "obj", "findScript", "injectScript", "registerWrapper", "onError", "onLoad", "loadScript", "error", "initStripe", "validateLoadParams", "loadStripe", "require_pure", "global", "window", "document", "slice", "concat", "indexOf", "toString", "version", "jQuery", "name", "clone", "string", "arr", "matches", "support", "tokenize", "expando", "hasOwn", "push", "i", "rtrim", "rquickExpr", "Sizzle", "match", "keys", "documentElement", "parent", "node", "dir", "map", "filter", "find", "isXML", "elem", "self", "object", "add", "index", "values", "key", "value", "data", "on", "event", "t", "collection", "html", "prop", "length", "j", "option", "location", "current", "error", "val", "off", "win", "method", "type", "$", "undefined", "exports", "locales", "defaults", "name", "values", "each", "option", "_", "message", "index", "collection", "iterator", "module", "it", "__webpack_require__", "isObject", "wellKnownSymbol", "create", "index", "name", "global", "classof", "createNonEnumerableProperty", "defineProperty", "getPrototypeOf", "uid", "Int8Array", "isView", "error", "TypedArray", "fails", "anInstance", "toLength", "arrayFill", "setToStringTag", "RangeError", "number", "key", "set", "ArrayBuffer", "DataView", "keys", "toObject", "toAbsoluteIndex", "fill", "arrayMethodIsStrict", "forEach", "bind", "isArrayIteratorMethod", "createProperty", "getIteratorMethod", "iterator", "toIndexedObject", "arraySpeciesCreate", "self", "array", "isArray", "anObject", "iteratorClose", "object", "toString", "classofRaw", "ownKeys", "getOwnPropertyDescriptor", "createPropertyDescriptor", "toPrimitive", "$", "values", "entries", "document", "getBuiltIn", "userAgent", "match", "version", "string", "path", "abs", "shared", "sharedKey", "hiddenKeys", "WeakMap", "inspectSource", "objectKeys", "symbol", "assign", "getOwnPropertySymbols", "defineProperties", "enumBugKeys", "html", "documentCreateElement", "activeXDocument", "exports", "indexOf", "aPossiblePrototype", "requireObjectCoercible", "t", "whitespaces", "setSpecies", "round", "Symbol", "arrayMethodHasSpeciesSupport", "concat", "filter", "addToUnscopables", "map", "slice", "splice", "every", "findIndex", "find", "includes", "Uint8Array", "reduce", "reverse", "some", "sort", "getIterator", "validateArgumentsLength", "URLSearchParams", "fetch", "URL", "Dropzone", "es_array_concat", "es_array_filter", "es_array_iterator", "es_array_map", "es_array_slice", "es_array_splice", "es_string_iterator", "F", "Emitter", "on", "event", "off", "defaultOptions", "drop", "removeFileEvent", "message", "_typeof", "obj", "_setPrototypeOf", "o", "p", "_assertThisInitialized", "_getPrototypeOf", "setupHiddenFileInput", "containsFiles", "noPropagation", "destroy", "getFallback", "removeEventListeners", "errorHandler", "readEntries", "onDone", "loadExif", "callback", "option", "handleNextChunk", "i", "_loop", "extend", "camelize", "checkElements", "without", "detectVerticalSquash", "drawImageIOSFix", "ExifRestore", "contentLoaded", "win", "add", "init", "poll", "global", "exports", "module", "hex", "SparkMD5", "event", "start", "getMetaValue", "name", "findElement", "toArray", "dispatchEvent", "DirectUpload", "error", "object", "DirectUploadController", "uuid", "uuid", "byteToHex", "unsafeStringify", "stringify", "uuid", "rnds8", "rng", "now", "uuid", "t", "version", "v4", "t", "uuid", "now", "version", "uuid", "$", "defaults", "e", "$", "version", "name", "object", "event", "current", "keys", "add", "match", "abs", "position", "scrollParent", "parent", "uniqueId", "uuid", "$", "object", "i", "now", "t", "name", "clone", "s", "parent", "map", "match", "path", "self", "message", "key", "dfd", "pathSegList", "event", "ajaxDfd", "attr", "error", "lastChild", "add", "tree", "xhr", "event", "global", "matches", "$", "error", "parser", "preventDefault", "CustomEvent", "event", "name", "toArray", "option", "message", "href", "$", "name", "$", "removeElement", "option", "$", "option", "$", "option", "$", "option", "$", "getParent", "index", "option", "$", "e", "option", "$", "defaults", "self", "option", "$", "option", "$", "option", "$", "option", "$", "option", "require_bootstrap", "parent", "$", "init_adminlte", "init_adminlte", "$", "defaults", "event", "event", "$", "undefined", "match", "indexOf", "array", "string", "range", "event", "self", "data", "t", "collection", "isObject", "index", "results", "container", "element", "tags", "css", "html", "matches", "selected", "current", "values", "$", "values", "$", "matches", "require_select2", "require_select2_sortable", "require_select2", "global", "bootbox", "bootbox", "require_dropzone", "import_dropzone", "event", "application", "map", "error", "message", "matches", "object", "index", "name", "match", "filter", "fetch", "values", "set", "matches", "match", "oldValue", "index", "error", "name", "descriptors", "values", "constructor", "functionName", "message", "object", "application", "element", "array", "filter", "event", "name", "t", "error", "import_bootbox", "error", "event", "Dropzone", "event", "element", "repeat", "index", "html", "date", "date", "name", "format", "keys", "index", "html", "path", "parent", "format", "date", "convert", "locales", "startOfWeek", "date", "range", "index", "startOfWeek", "current", "range", "range", "date", "index", "index", "current", "date", "range", "parent", "date", "date", "format", "index", "event", "date", "_CheckboxSelectAll", "event", "event", "element", "object", "keys", "obj", "event", "name", "iterator", "parent", "index", "extend", "$", "ghostEl", "option", "defaults", "name", "rootEl", "cloneEl", "oldIndex", "newIndex", "oldDraggableIndex", "newDraggableIndex", "putSortable", "pluginEvent", "_detectDirection", "_dragElInRowColumn", "_detectNearestEmptySortable", "_prepareGroup", "dragEl", "_hideGhostForTarget", "_unhideGhostForTarget", "nearestEmptyInsertDetectEvent", "event", "_checkOutsideTargetEl", "filter", "dragStartFn", "parent", "target", "after", "el", "extend", "plugins", "drop", "autoScroll", "onSpill", "event", "_RailsNestedForm", "event", "_Reveal", "jquery", "$", "version", "name", "object", "event", "current", "keys", "add", "match", "data", "abs", "position", "map", "form", "labels", "scrollParent", "parent", "uniqueId", "uuid", "option", "set", "document", "error", "pageY", "t", "jQuery", "toString", "color", "each", "getType", "string", "parser", "values", "is", "_", "index", "hook", "effect", "import_jquery", "import_bootbox", "event", "option", "event", "index", "css", "global", "this", "isArray", "isObject", "isNumber", "isDate", "map", "extend", "format", "locale", "some", "t", "isValid", "to", "from", "deprecate", "name", "set", "keys", "now", "number", "sign", "token", "ordinal", "array", "i", "string", "diff", "localeData", "daysInYear", "set$1", "date", "indexOf", "hours", "minutes", "locales", "require", "values", "match", "defaults", "tokens", "meridiem", "years", "months", "weeks", "days", "seconds", "milliseconds", "offset", "matches", "add", "isString", "clone", "toString", "toDate", "toArray", "toObject", "index", "abs", "round", "thresholds", "require$$0", "moment", "de", "es", "fr", "it", "ja", "nl", "pl", "ru", "tr", "uk", "error", "fails", "classofRaw", "require$$1", "getOwnPropertyDescriptor", "classof", "require$$2", "isNullOrUndefined", "requireObjectCoercible", "isCallable", "path", "globalThis", "navigator", "userAgent", "Deno", "version", "symbol", "getBuiltIn", "require$$3", "tryToString", "aCallable", "defineProperty", "defineGlobalProperty", "sharedStoreModule", "shared", "uid", "require$$4", "require$$5", "Symbol", "isSymbol", "getMethod", "ordinaryToPrimitive", "wellKnownSymbol", "toPrimitive", "toPropertyKey", "document", "createPropertyDescriptor", "toIndexedObject", "require$$6", "require$$7", "bind", "anObject", "current", "object", "createNonEnumerableProperty", "require$$8", "require$$9", "toIntegerOrInfinity", "toLength", "inspectSource", "isConstructor", "arraySpeciesConstructor", "$", "lengthOfArrayLike", "doesNotExceedSafeInteger", "createProperty", "arraySpeciesCreate", "arrayMethodHasSpeciesSupport", "require$$10", "require$$11", "concat", "toAbsoluteIndex", "hiddenKeys", "enumBugKeys", "objectKeys", "defineProperties", "html", "documentCreateElement", "sharedKey", "activeXDocument", "create", "arraySlice", "defineBuiltIn", "WeakMap", "TypeError", "self", "require$$12", "require$$13", "require$$14", "require$$15", "require$$16", "require$$17", "require$$18", "require$$19", "require$$20", "require$$21", "require$$22", "require$$23", "require$$24", "defineBuiltInAccessor", "require$$25", "require$$26", "require$$27", "require$$28", "require$$29", "require$$30", "require$$31", "require$$32", "require$$33", "setToStringTag", "require$$34", "require$$35", "require$$36", "RangeError", "stringify", "getOwnPropertySymbols", "getPrototypeOf", "isPossiblePrototype", "aPossiblePrototype", "entries", "addToUnscopables", "createIterResultObject", "parent", "slice", "getBuiltInPrototypeMethod", "ownKeys", "arrayMethodIsStrict", "forEach", "reverse", "deletePropertyOrThrow", "splice", "assign", "includes", "filter", "objectGetPrototypeOf", "whitespaces", "parseInt", "_parseInt", "Object", "repeat", "validateArgumentsLength", "Function", "schedulersFix", "setInterval", "setTimeout", "fill", "Emitter", "event", "on", "_extends", "iterator", "find", "TouchAction", "hasParent", "Input", "destroy", "PointerEventInput", "sort", "TouchInput", "MouseInput", "removeLastTouch", "TouchMouseInput", "Recognizer", "emit", "TapRecognizer", "AttrRecognizer", "PanRecognizer", "SwipeRecognizer", "PinchRecognizer", "RotateRecognizer", "PressRecognizer", "Manager", "off", "SingleTouchInput", "message", "stack", "merge", "Hammer", "DELETE", "_Symbol", "pureDeepObjectAssign", "base", "_len", "arguments", "length", "updates", "Array", "_key", "deepObjectAssign", "merged", "deepObjectAssignNonentry", "stripDelete", "_len2", "_key2", "_sliceInstanceProperty", "call", "a", "b", "Date", "setTime", "getTime", "prop", "_Reflect$ownKeys", "prototype", "propertyIsEnumerable", "_Array$isArray", "_mapInstanceProperty", "value", "_Object$keys", "prepareElements", "JSONcontainer", "elementType", "hasOwnProperty", "redundant", "used", "cleanupElements", "elementTypeJsonContainer", "parentNode", "removeChild", "resetElements", "getSVGElement", "svgContainer", "element", "shift", "createElementNS", "appendChild", "push", "getDOMElement", "DOMContainer", "insertBefore", "createElement", "undefined", "drawPoint", "x", "y", "groupTemplate", "labelObj", "point", "style", "setAttributeNS", "size", "styles", "className", "label", "xOffset", "yOffset", "content", "textContent", "drawBar", "width", "height", "rect", "getNavigatorLanguage", "languages", "userLanguage", "language", "browserLanguage", "require$$0", "path", "require$$1", "getOwnPropertySymbols", "parent", "$", "fails", "toIndexedObject", "require$$2", "require$$3", "require$$4", "getOwnPropertyDescriptor", "it", "Object", "getOwnPropertyDescriptorModule", "ownKeys", "createProperty", "require$$5", "getOwnPropertyDescriptors", "object", "keys", "index", "defineProperties", "definePropertiesModule", "defineProperty", "definePropertyModule", "wellKnownSymbol", "symbol", "getBuiltIn", "Symbol", "error", "shared", "isSymbol", "require$$6", "require$$7", "require$$8", "require$$9", "require$$10", "toIntegerOrInfinity", "toString", "requireObjectCoercible", "createIterResultObject", "string", "iterator", "_typeof", "_Symbol$iterator", "o", "toPrimitive", "t", "_defineProperty", "_Object$defineProperty", "aCallable", "toObject", "lengthOfArrayLike", "self", "arrayMethodIsStrict", "reduce", "getBuiltInPrototypeMethod", "isArray", "doesNotExceedSafeInteger", "bind", "arraySpeciesCreate", "flatMap", "addToUnscopables", "isObject", "classof", "hiddenKeys", "uid", "create", "splice", "internalMetadataModule", "getMethod", "isNullOrUndefined", "anObject", "tryToString", "getIteratorMethod", "getIterator", "isArrayIteratorMethod", "iteratorClose", "globalThis", "createNonEnumerableProperty", "iterate", "anInstance", "isCallable", "setToStringTag", "require$$11", "forEach", "require$$12", "require$$13", "require$$14", "collection", "defineBuiltIn", "defineBuiltInAccessor", "defineBuiltIns", "setSpecies", "define", "set", "add", "collectionStrong", "Map", "caller", "map", "Set", "iterateSimple", "getIteratorDirect", "aSet", "clone", "getSetRecord", "setMethodAcceptSetLike", "arraySlice", "sort", "array", "userAgent", "deletePropertyOrThrow", "some", "values", "entries", "createNewDataPipeFrom", "from", "DataPipeUnderConstruction", "SimpleDataPipe", "constructor", "source", "transformers", "target", "_context", "_context2", "_context3", "_bindInstanceProperty", "_add", "call", "remove", "_remove", "update", "_update", "_source", "_transformers", "_target", "all", "_transformItems", "get", "start", "on", "_listeners", "stop", "off", "items", "_context4", "_reduceInstanceProperty", "transform", "_name", "payload", "oldData", "filter", "callback", "push", "input", "_filterInstanceProperty", "_mapInstanceProperty", "_flatMapInstanceProperty", "to", "moment", "window", "bundledMoment", "name", "util", "css", "j", "parser", "html", "xss", "match", "escapeHtml", "str", "_default", "ret", "isDataViewLike", "obj", "_obj$idProp", "idProp", "_idProp", "isDataViewLikeUpstream", "ASPDateRegex", "NumericRegex", "convert", "type", "undefined", "String", "Error", "Boolean", "isString", "isNaN", "Date", "parse", "valueOf", "Number", "toDate", "e", "TypeError", "getType", "isNumber", "isMoment", "exec", "toISOString", "format", "value", "concat", "typeCoerceDataSet", "rawDS", "_context5", "_context6", "_context7", "arguments", "length", "end", "coercedDS", "DataSet", "fieldId", "pipe", "item", "_Object$keys", "acc", "key", "getDataSet", "updateOnly", "clear", "_forEachInstanceProperty", "getIds", "dispose", "setupXSSCleaner", "options", "customXSS", "xssFilter", "FilterXSS", "process", "setupNoOpCleaner", "configuredXSSProtection", "setupXSSProtection", "disabled", "console", "warn", "filterOptions", "availableUtils", "_objectSpread", "whitespaces", "parseFloat", "_parseFloat", "Component", "props", "setOptions", "extend", "redraw", "destroy", "_isResized", "resized", "_previousWidth", "width", "_previousHeight", "height", "repeat", "convertHiddenOptions", "body", "hiddenDates", "_Array$isArray", "i", "_repeatInstanceProperty", "dateItem", "_sortInstanceProperty", "a", "b", "updateHiddenDates", "domProps", "centerContainer", "range", "totalRange", "pixelTime", "startDate", "endDate", "_d", "duration", "offset", "runUntil", "day", "dayOfYear", "year", "subtract", "dayOffset", "diff", "date", "month", "log", "removeDuplicates", "startHidden", "getIsHidden", "endHidden", "rangeStart", "rangeEnd", "hidden", "startToFront", "endToFront", "_applyRange", "safeDates", "stepOverHiddenDates", "moment", "timeStep", "previousTime", "stepInHidden", "currentValue", "current", "valueOf", "i", "hiddenDates", "length", "startDate", "start", "endDate", "end", "_end", "prevValue", "newValue", "year", "switchedYear", "month", "switchedMonth", "dayOfYear", "switchedDay", "toScreen", "Core", "time", "width", "conversion", "body", "range", "offset", "scale", "hidden", "getIsHidden", "duration", "getHiddenDurationBetween", "hiddenBeforeStart", "getHiddenDurationBeforeStart", "options", "toDate", "rangeAfterEnd", "correctTimeForHidden", "toTime", "x", "Date", "hiddenDuration", "totalDuration", "partialDuration", "accumulatedHiddenDuration", "getAccumulatedHiddenDuration", "getHiddenDurationBefore", "timeOffset", "requiredDuration", "previousPoint", "snapAwayFromHidden", "direction", "correctionEnabled", "isHidden", "Range", "Component", "constructor", "body", "options", "_context", "_context2", "_context3", "_context4", "_context5", "_context6", "_context7", "now", "moment", "hours", "minutes", "seconds", "milliseconds", "start", "clone", "add", "valueOf", "end", "millisecondsPerPixelCache", "undefined", "rolling", "deltaDifference", "scaleOffset", "startToFront", "endToFront", "defaultOptions", "rtl", "direction", "moveable", "zoomable", "min", "max", "zoomMin", "zoomMax", "rollingMode", "follow", "offset", "util", "extend", "props", "touch", "animationTimer", "emitter", "on", "_bindInstanceProperty", "_onDragStart", "call", "_onDrag", "_onDragEnd", "_onMouseWheel", "_onTouch", "_onPinch", "dom", "rollingModeBtn", "addEventListener", "startRolling", "setOptions", "fields", "selectiveExtend", "setRange", "me", "update", "stopRolling", "interval", "t", "convert", "Date", "rollingModeOffset", "animation", "scale", "conversion", "domProps", "center", "width", "style", "visibility", "currentTimeTimer", "_setTimeout", "clearTimeout", "callback", "frameCallback", "byUser", "finalStart", "finalEnd", "_cancelAnimation", "initStart", "initEnd", "duration", "easingName", "easingFunction", "easingFunctions", "_context8", "Error", "_concatInstanceProperty", "concat", "_JSON$stringify", "_Object$keys", "join", "initTime", "_Date$now", "anyChanged", "next", "dragging", "time", "ease", "done", "s", "e", "changed", "_applyRange", "DateUtil", "hiddenDates", "params", "event", "emit", "timeoutID", "getMillisecondsPerPixel", "clientWidth", "newStart", "newEnd", "diff", "isNaN", "_parseFloat", "compensation", "getRange", "totalHidden", "previousDelta", "_isInsideRange", "allowDragging", "root", "cursor", "validateDirection", "delta", "deltaX", "deltaY", "height", "diffRange", "safeStart", "safeEnd", "startDate", "endDate", "wheelDelta", "detail", "zoomKey", "zoomFriction", "pointerDate", "pointer", "getPointer", "x", "clientX", "y", "clientY", "_pointerToDate", "zoom", "preventDefault", "centerDate", "hiddenDuration", "hiddenDurationBefore", "hiddenDurationAfter", "centerContainerRect", "centerContainer", "getBoundingClientRect", "left", "right", "toTime", "element", "elementRect", "top", "move", "moveTo", "destroy", "TypeError", "require$$0", "path", "require$$1", "setInterval", "Hammer", "hammerMock", "noop", "off", "get", "set", "modifiedHammer", "window", "OurHammer", "PropagatingHammer", "onTouch", "hammer", "inputHandler", "isFirst", "onRelease", "isFinal", "disablePreventDefaultVertically", "pinchRecognizer", "TOUCH_ACTION_PAN_Y", "getTouchAction", "TimeStep", "minimumStep", "current", "_start", "_end", "autoScale", "step", "switchedDay", "switchedMonth", "switchedYear", "_Array$isArray", "format", "FORMAT", "setMoment", "setFormat", "defaultFormat", "deepExtend", "setMinimumStep", "roundToMinor", "weekday", "year", "Math", "floor", "month", "date", "priorCurrent", "subtract", "week", "isSame", "hasNext", "prev", "showMajorLabels", "nextWeek", "getCurrent", "setScale", "setAutoScale", "enable", "stepYear", "stepMonth", "stepDay", "stepHour", "stepMinute", "stepSecond", "stepMillisecond", "showWeekScale", "snap", "round", "_step", "isMajor", "isoWeekday", "getLabelMinor", "minorLabels", "length", "getLabelMajor", "majorLabels", "getClassName", "_moment", "m", "locale", "lang", "classNames", "even", "value", "today", "currentWeek", "currentMonth", "currentYear", "push", "toLowerCase", "_filterInstanceProperty", "String", "millisecond", "second", "minute", "hour", "day", "TimeAxis", "foreground", "lines", "majorTexts", "minorTexts", "redundant", "range", "lineTop", "orientation", "axis", "showMinorLabels", "maxMinorChars", "timeAxis", "_create", "selectiveDeepExtend", "document", "createElement", "background", "className", "parentNode", "removeChild", "redraw", "parent", "bottom", "parentChanged", "_calculateCharSize", "minorLabelHeight", "minorCharHeight", "majorLabelHeight", "majorCharHeight", "offsetWidth", "minorLineHeight", "minorLineWidth", "majorLineHeight", "majorLineWidth", "foregroundNextSibling", "nextSibling", "backgroundNextSibling", "_repaintLabels", "insertBefore", "appendChild", "backgroundVertical", "_isResized", "timeLabelsize", "minorCharWidth", "xNext", "showMinorGrid", "prevWidth", "line", "xFirstMajorLabel", "count", "MAX", "toScreen", "label", "_repaintMinorText", "_repaintMajorText", "_repaintMajorLine", "_repaintMinorLine", "_parseInt", "warnedForOverflow", "console", "warn", "leftTime", "leftText", "widthText", "majorCharWidth", "_forEachInstanceProperty", "arr", "elem", "pop", "text", "shift", "content", "createTextNode", "innerHTML", "xss", "_setXY", "childNodes", "directionX", "transform", "measureCharMinor", "position", "clientHeight", "measureCharMajor", "handleEvent", "i", "Activator", "container", "active", "overlay", "_onTapOverlay", "events", "stopPropagation", "onClick", "_hasParent", "target", "deactivate", "keycharm", "escListener", "Emitter", "prototype", "removeEventListener", "activate", "display", "addClassName", "removeClassName", "unbind", "en", "deleteSelected", "en_EN", "en_US", "it", "it_IT", "it_CH", "nl", "nl_NL", "nl_BE", "de", "de_DE", "de_CH", "fr", "fr_FR", "fr_CA", "fr_BE", "fr_CH", "es", "es_ES", "uk", "uk_UA", "ru", "ru_RU", "pl", "pl_PL", "pt", "pt_BR", "pt_PT", "tr", "tr_TR", "ja", "ja_JP", "sv", "sv_SE", "nb", "nb_NO", "nn", "nn_NO", "lt", "lt_LT", "locales", "CustomTime", "id", "title", "defaultLocales", "customTime", "eventParams", "bar", "drag", "onMouseWheel", "attachEvent", "threshold", "DIRECTION_ALL", "hide", "warned", "charAt", "toUpperCase", "substring", "setCustomTime", "getCustomTime", "setCustomMarker", "editable", "marker", "setAttribute", "focus", "_onMarkerChange", "_onMarkerChanged", "setCustomTitle", "getScale", "getStep", "snappedTime", "customTimeFromTarget", "Object", "hasOwnProperty", "Core", "backgroundHorizontal", "leftContainer", "rightContainer", "shadowTop", "shadowBottom", "shadowTopLeft", "shadowBottomLeft", "shadowTopRight", "shadowBottomRight", "loadingScreen", "border", "scrollTop", "scrollTopMin", "initialDrawDone", "_redraw", "initialRangeChangeDone", "_origRedraw", "throttle", "properties", "itemSet", "initialItemSetDrawn", "queue", "hammerUtil", "timelineListeners", "type", "listener", "isActive", "preferZoom", "verticalScroll", "horizontalScroll", "wheelDeltaY", "wheelDeltaX", "HORIZONTAL_AXIS", "LINE_HEIGHT", "PAGE_HEIGHT", "deltaMode", "isVerticalScrollingPreferred", "isCurrentlyScrollingWithVerticalScrollWheel", "abs", "isHorizontalScrollKeyConfiguredAndPressed", "horizontalScrollKey", "adjusted", "newScrollTop", "_setScrollTop", "horizontalScrollInvert", "wheelType", "onmousewheel", "onMouseScrollSide", "itemAddedToTimeline", "handleDragOver", "getEventProperties", "_indexOfInstanceProperty", "dataTransfer", "dropEffect", "handleDrop", "itemData", "JSON", "parse", "getData", "err", "_onAddItem", "_onDropObjectOnItem", "customTimes", "redrawCount", "item", "timeAxis2", "_options", "components", "index", "_spliceInstanceProperty", "drawPoints", "onRender", "clickToUse", "activator", "_initAutoResize", "component", "configurator", "_createConfigurator", "configure", "appliedOptions", "setModuleOptions", "global", "_context9", "setItems", "setGroups", "_stopAutoResize", "_context0", "_context1", "setCustomTimeMarker", "_context10", "setCustomTimeTitle", "_context11", "addCustomTime", "_context12", "timestamp", "exists", "_someInstanceProperty", "removeCustomTime", "_context13", "_context14", "_context15", "_context16", "_context17", "getVisibleItems", "getItemsAtCurrentTime", "timeOfEvent", "getVisibleGroups", "fit", "getDataRange", "setWindow", "arguments", "getWindow", "zoomIn", "percentage", "newInterval", "distance", "zoomOut", "_context18", "resized", "maxHeight", "option", "asSize", "minHeight", "rootOffsetWidth", "offsetHeight", "contentHeight", "autoHeight", "containerHeight", "scrollbarWidth", "getScrollBarWidth", "leftContainerClientWidth", "rightContainerClientWidth", "_setDOM", "_updateScrollTop", "visibilityTop", "visibilityBottom", "replace", "RegExp", "contentsOverflow", "DIRECTION_HORIZONTAL", "longSelectPressTime", "MAX_REDRAW", "log", "centerWidth", "setCurrentTime", "currentTime", "getCurrentTime", "_toTime", "_toGlobalTime", "_toScreen", "_toGlobalScreen", "autoResize", "_startAutoResize", "_onResize", "rootOffsetHeight", "lastWidth", "lastHeight", "watchTimer", "_setInterval", "clearInterval", "initialScrollTop", "oldScrollTop", "_getScrollTop", "CurrentTime", "showCurrentTime", "alignCurrentTime", "startOf", "stop", "$", "addToUnscopables", "require$$2", "find", "getBuiltInPrototypeMethod", "EPSILON", "orderByStart", "items", "_sortInstanceProperty", "a", "b", "data", "orderByEnd", "aTime", "bTime", "stack", "margin", "force", "shouldBailItemsRedrawFunction", "stackingResult", "performStacking", "substack", "subgroup", "subgroupHeight", "baseTop", "vertical", "nostack", "subgroups", "isStackSubgroups", "newTop", "visible", "stackSubgroups", "_Object$values", "stackSubgroupsWithInnerStack", "subgroupItems", "doSubStack", "subgroupOrder", "j", "otherSubgroup", "margins", "compareTimes", "shouldStack", "shouldOthersStack", "getInitialHeight", "shouldBail", "getItemStart", "getItemEnd", "horizontal", "itemsToPosition", "itemsAlreadyPositioned", "previousStart", "insertionIndex", "itemStart", "findIndexFrom", "previousEnd", "horizontalOverlapStartIndex", "horizontalOverlapEndIndex", "itemEnd", "findLastIndexBetween", "horizontallyCollidingItems", "filterBetween", "i2", "otherItem", "checkVerticalSpatialCollision", "currentHeight", "predicate", "startIndex", "endIndex", "result", "BACKGROUND", "ReservedGroupIds", "Group", "constructor", "groupId", "data", "itemSet", "subgroups", "subgroupStack", "subgroupStackAll", "subgroupVisibility", "doInnerStack", "shouldBailStackItems", "subgroupIndex", "subgroupOrderer", "subgroupOrder", "isVisible", "height", "stackDirty", "_disposeCallbacks", "nestedGroups", "showNested", "key", "Object", "prototype", "hasOwnProperty", "call", "heightMode", "options", "groupHeightMode", "nestedInGroup", "dom", "props", "label", "width", "className", "items", "visibleItems", "itemsInRange", "orderedItems", "byStart", "byEnd", "checkRangedItems", "handleCheckRangedItems", "body", "emitter", "on", "push", "off", "_create", "setData", "document", "createElement", "groupEditable", "order", "inner", "appendChild", "foreground", "background", "axis", "marker", "style", "visibility", "position", "innerHTML", "groupTouchParams", "isDragging", "content", "templateFunction", "groupTemplate", "_context", "_bindInstanceProperty", "Element", "firstChild", "removeChild", "isReactComponent", "undefined", "util", "xss", "title", "addClassName", "removeClassName", "treeLevel", "removeCssText", "addCssText", "getLabelWidth", "_didMarkerHeightChange", "markerHeight", "clientHeight", "lastMarkerHeight", "redrawQueue", "redrawQueueLength", "_forEachInstanceProperty", "item", "dirty", "displayed", "returnQueue", "redraw", "length", "needRedraw", "i", "fns", "_calculateGroupSizeAndPosition", "offsetTop", "offsetLeft", "offsetWidth", "top", "right", "_shouldBailItemsRedraw", "me", "timeoutOptions", "onTimeout", "bailOptions", "relativeBailingTime", "itemsSettingTime", "bailTimeMs", "timeoutMs", "userBailFunction", "callback", "bail", "initialDrawDone", "Math", "abs", "_Date$now", "Date", "userContinueNotBail", "didUserContinue", "_redrawItems", "forceRestack", "lastIsVisible", "margin", "range", "restack", "_context2", "_context3", "_context4", "_context5", "_context6", "_context7", "_filterInstanceProperty", "isCluster", "orderedClusters", "_Set", "_mapInstanceProperty", "cluster", "getVisibleItems", "_context8", "_context9", "_updateItemsInRange", "visibleClusters", "_updateClustersInRange", "getVisibleItemsGroupedBySubgroup", "orderFn", "visibleSubgroupsItems", "subgroup", "_context0", "_sortInstanceProperty", "a", "b", "stackSubgroups", "stack", "_updateSubGroupHeights", "_context1", "_context10", "_context11", "_context12", "customOrderedItems", "_sliceInstanceProperty", "_context13", "repositionX", "hide", "emit", "_didResize", "resized", "updateProperty", "labelWidth", "clientWidth", "labelHeight", "_applyGroupHeight", "concat", "_updateItemsVerticalPosition", "ii", "repositionY", "_context14", "_context15", "_context18", "_context20", "_context24", "queue", "_context16", "_isGroupVisible", "_context17", "_updateSubgroupsSizes", "_context19", "_calculateHeight", "_context21", "_context22", "_context23", "result", "fn", "_Object$keys", "_resetSubgroups", "max", "vertical", "visible", "Boolean", "domProps", "centerContainer", "scrollTop", "toArray", "min", "offset", "ceil", "show", "parentNode", "labelSet", "add", "_context25", "id", "setParent", "_addToSubgroup", "orderSubgroups", "_includesInstanceProperty", "_checkIfVisible", "subgroupId", "arguments", "start", "end", "index", "itemEnd", "_context26", "initialEnd", "newStart", "newEnd", "sortArray", "sortField", "remove", "_context27", "_context28", "_indexOfInstanceProperty", "_spliceInstanceProperty", "_removeFromSubgroup", "_context29", "itemIndex", "_context30", "removeFromDataSet", "removeItem", "array", "startArray", "endArray", "oldVisibleItems", "visibleItemsLookup", "interval", "lowerBound", "upperBound", "startSearchFunction", "value", "endSearchFunction", "_checkIfVisibleWithReference", "initialPosByStart", "binarySearchCustom", "_traceVisible", "initialPosByEnd", "_sortVisibleItems", "j", "initialPos", "breakCondition", "hasItems", "unshift", "oldVisibleClusters", "visibleClustersLookup", "changeSubgroup", "oldSubgroup", "newSubgroup", "dispose", "disposeCallback", "pop", "BackgroundGroup", "left", "Item", "conversion", "parent", "defaultOptions", "locales", "locale", "extend", "defaultLocales", "selected", "groupShowing", "selectable", "setSelectability", "editable", "_updateEditStatus", "select", "unselect", "groupChanged", "group", "_moveToGroup", "subGroupChanged", "_repaintDragCenter", "updateTime", "dragCenter", "dragCenterItem", "hammerDragCenter", "Hammer", "event", "stopPropagation", "_onUpdateItem", "_onDragStart", "_onDrag", "_onDragEnd", "get", "set", "time", "box", "dragLeft", "insertBefore", "point", "destroy", "_repaintDeleteButton", "anchor", "overrideItems", "deleteButton", "rtl", "optionsLocale", "warned", "console", "warn", "deleteSelected", "hammerDeleteButton", "_repaintOnItemUpdateTimeTooltip", "tooltipOnItemUpdateTime", "onItemUpdateTimeTooltip", "touchParams", "itemIsDragging", "transform", "tooltipOffset", "itemDistanceFromTop", "orientation", "isCloseToTop", "bottom", "template", "moment", "format", "_getItemData", "itemsData", "_updateContents", "element", "changed", "itemVisibleFrameContent", "visibleFrameTemplateFunction", "itemData", "frameElement", "itemVisibleFrameContentElement", "getElementsByClassName", "visibleFrameTemplate", "_contentToString", "type", "Error", "_updateDataAttributes", "dataAttributes", "attributes", "_Array$isArray", "name", "setAttribute", "removeAttribute", "_updateStyle", "outerHTML", "updateGroup", "selectiveExtend", "getWidthLeft", "getWidthRight", "getTitle", "tooltip", "BoxItem", "dot", "line", "align", "widthInMs", "getMillisecondsPerPixel", "getTime", "_createDomElement", "_appendDomElement", "_updateDirtyDomComponents", "_getDomComponentsSizes", "previous", "offsetHeight", "_updateDomComponentsSizes", "sizes", "_repaintDomAdditionals", "repositionXY", "x", "y", "directionX", "_concatInstanceProperty", "boxX", "boxY", "dotX", "dotY", "lineX", "lineY", "toScreen", "lineWidth", "dotWidth", "lineStyle", "lineHeight", "itemSetHeight", "PointItem", "marginLeft", "marginRight", "translateX", "pointX", "pointY", "RangeItem", "overflow", "frame", "visibleFrame", "baseClassName", "maxWidth", "window", "getComputedStyle", "whiteSpace", "_repaintDragLeft", "_repaintDragRight", "limitSize", "parentWidth", "contentStartPosition", "contentWidth", "boxWidth", "round", "itemsAlwaysDraggable", "dragLeftItem", "dragRight", "dragRightItem", "BackgroundItem", "itemSubgroup", "center", "Popup", "container", "overflowMethod", "padding", "hidden", "setPosition", "_parseInt", "setText", "doShow", "maxHeight", "isLeft", "isTop", "$", "require$$0", "require$$1", "arrayMethodIsStrict", "require$$2", "every", "getBuiltInPrototypeMethod", "it", "ClusterItem", "modifiedOptions", "_Object$assign", "fitOnDoubleClick", "uiItems", "randomUUID", "_setupRange", "eventEmitter", "attached", "setUiItems", "detach", "attach", "rangeWidth", "getData", "showStipes", "repositionXWithRanges", "repositionXWithoutRanges", "display", "_isStipeVisible", "repositionStype", "lineOffsetWidth", "dotOffsetWidth", "lineOffset", "dotOffset", "lineOffsetDirection", "dotOffsetDirection", "minWidth", "move", "detachFromParent", "_onDoubleClick", "_fit", "stats", "valueOf", "s", "centers", "avg", "_reduceInstanceProperty", "sum", "_someInstanceProperty", "_getUiItems", "ondblclick", "_getFitRange", "fitStart", "fitEnd", "fitArgs", "animation", "UNGROUPED", "ClusterGenerator", "groups", "cache", "createClusterItem", "newItem", "setItems", "dataChanged", "applyOnChangedLevel", "updateData", "getClusters", "oldClusters", "scale", "maxItems", "clusterCriteria", "level", "granularity", "timeWindow", "log", "pow", "levelChanged", "cacheLevel", "applyDataNow", "_dropLevelsCache", "_filterData", "clusters", "groupName", "iMax", "neighbors", "k", "l", "num", "clusterItems", "m", "getGroupId", "_getClusterForItems", "_Object$values", "currentGroupName", "oldClustersLookup", "itemsIds", "oldClusterData", "size", "_everyInstanceProperty", "clusterItem", "has", "titleTemplate", "toTime", "replace", "clusterContent", "clusterOptions", "ItemSet", "Component", "groupOrderSwap", "fromGroup", "toGroup", "targetOrder", "groupOrder", "multiselect", "longSelectPressTime", "snap", "TimeStep", "onDropObjectOnItem", "_objectData", "onAdd", "onUpdate", "onMove", "onRemove", "onMoving", "onAddGroup", "onMoveGroup", "onRemoveGroup", "horizontal", "showTooltips", "followMouse", "delay", "hammer", "groupsData", "initialItemSetDrawn", "sequentialSelection", "itemListeners", "_event", "params", "_onAdd", "clusterGenerator", "update", "_onUpdate", "_onRemove", "groupListeners", "senderId", "_onAddGroups", "getDataSet", "groupData", "updatedGroups", "nestedGroupId", "updatedNestedGroup", "_onUpdateGroups", "_onRemoveGroups", "groupIds", "selection", "popup", "popupTimer", "setOptions", "_updateUngrouped", "backgroundGroup", "isFirst", "_onTouch", "threshold", "direction", "ALL", "_onSelectItem", "_onMultiSelectItem", "_onAddItem", "groupHammer", "rightContainer", "leftContainer", "_onGroupClick", "_onGroupDragStart", "_onGroupDrag", "_onGroupDragEnd", "DIRECTION_VERTICAL", "addEventListener", "_onMouseOver", "_onMouseOut", "_onMouseMove", "_onMouseWheel", "fields", "addCallback", "markDirty", "refreshItems", "restackGroups", "_detachAllClusters", "clearPopupTimer", "setGroups", "backgroundVertical", "setPopupTimer", "_setTimeout", "clearTimeout", "setSelection", "ids", "idsToDeselect", "selectedId", "getItemById", "getSelection", "getRange", "rawVisibleItems", "getItemsAtCurrentTime", "timeOfEvent", "getVisibleGroups", "_findInstanceProperty", "_deselect", "asSize", "option", "border", "_clusterItems", "_orderGroups", "visibleInterval", "zoomed", "lastVisibleInterval", "lastWidth", "scrolled", "lastRangeStart", "changedStackOption", "lastStack", "changedStackSubgroupsOption", "lastStackSubgroups", "firstGroup", "_firstGroup", "firstMargin", "nonFirstMargin", "minHeight", "groupMargin", "redrawResults", "groupResized", "_isResized", "firstGroupIndex", "firstGroupId", "ungrouped", "itemId", "getLabelSet", "oldItemsData", "isDataViewLike", "typeCoerceDataSet", "TypeError", "getIds", "getItems", "rawDS", "_order", "getGroups", "_getType", "types", "_removeItem", "_updateItem", "_addItem", "count", "groupOptions", "_Object$create", "_orderNestedGroups", "equalArray", "getOrderedNestedGroups", "t", "nestedGroupIds", "filter", "nestedGroup", "topGroupIds", "_constructByEndArray", "itemFromTarget", "target", "itemProps", "_getGroupIndex", "selectedItem", "initialX", "_cloneItemData", "srcEvent", "ctrlKey", "metaKey", "_onDragStartAddItem", "baseGroupIndex", "itemsToDrag", "groupIndex", "groupOffset", "frameRect", "getBoundingClientRect", "getScale", "step", "getStep", "idProp", "groupFromTarget", "containerRect", "domRootOffsetLeft", "root", "xOffset", "updateGroupAllowed", "newGroupBase", "current", "initial", "initialStart", "updateTimeAllowed", "convert", "duration", "newOffset", "oldGroup", "exists", "toggleGroupShowNested", "force", "nestingGroup", "fullNestedGroups", "nextLevel", "node", "showNestedGroups", "toggleGroupDragClassName", "classList", "toggle", "originalOrder", "movingUp", "clientY", "targetGroup", "draggedGroupHeight", "targetGroupHeight", "draggedGroup", "newOrder", "origOrder", "draggedId", "numGroups", "curPos", "orgOffset", "slippedPosition", "switchGroup", "shouldBeGroup", "switchGroupId", "dataset", "_idProp", "shiftKey", "oldSelection", "newSelection", "related", "itemFromRelatedTarget", "clientX", "_onDropObjectOnItem", "objectData", "JSON", "parse", "dataTransfer", "newItemData", "itemGroup", "lastSelectedGroup", "multiselectPerGroup", "_getItemRange", "_item", "filteredSelection", "itemFromElement", "cur", "relatedTarget", "foregroundRect", "itemSetFromTarget", "clone", "_updateClusters", "newClustersIds", "clustersToUnselect", "selectionChanged", "selectedIdx", "_context31", "errorFound", "allOptions", "printStyle", "Validator", "validate", "referenceOptions", "subObject", "usedOptions", "path", "check", "__any__", "getSuggestion", "referenceOption", "is_object", "getType", "refOptionObj", "__type__", "checkFields", "message", "printLocation", "optionType", "refOptionType", "print", "copyAndExtendArray", "object", "Number", "String", "nodeType", "_isAMomentObject", "localSearch", "findInOptions", "globalSearch", "localSearchThreshold", "globalSearchThreshold", "msg", "indexMatch", "distance", "closestMatch", "recursive", "closestMatchPath", "lowerCaseOption", "toLowerCase", "op", "levenshteinDistance", "copyArray", "prefix", "str", "_JSON$stringify", "matrix", "charAt", "string", "bool", "number", "date", "any", "configure", "enabled", "boolean", "function", "alignCurrentTime", "rollingMode", "follow", "verticalScroll", "horizontalScroll", "horizontalScrollKey", "horizontalScrollInvert", "autoResize", "throttleRedraw", "clickToUse", "minorLabels", "millisecond", "second", "minute", "hour", "weekday", "day", "week", "month", "year", "majorLabels", "hiddenDates", "repeat", "maxMinorChars", "moveable", "onInitialDrawComplete", "showCurrentTime", "showMajorLabels", "showMinorLabels", "showWeekScale", "null", "loadingScreenTemplate", "timeAxis", "preferZoom", "zoomable", "zoomKey", "zoomFriction", "zoomMax", "zoomMin", "disabled", "filterOptions", "configureOptions", "global", "groupsDraggable", "htmlColors", "black", "navy", "darkblue", "mediumblue", "blue", "darkgreen", "green", "teal", "darkcyan", "deepskyblue", "darkturquoise", "mediumspringgreen", "lime", "springgreen", "aqua", "cyan", "midnightblue", "dodgerblue", "lightseagreen", "forestgreen", "seagreen", "darkslategray", "limegreen", "mediumseagreen", "turquoise", "royalblue", "steelblue", "darkslateblue", "mediumturquoise", "indigo", "darkolivegreen", "cadetblue", "cornflowerblue", "mediumaquamarine", "dimgray", "slateblue", "olivedrab", "slategray", "lightslategray", "mediumslateblue", "lawngreen", "chartreuse", "aquamarine", "maroon", "purple", "olive", "gray", "skyblue", "lightskyblue", "blueviolet", "darkred", "darkmagenta", "saddlebrown", "darkseagreen", "lightgreen", "mediumpurple", "darkviolet", "palegreen", "darkorchid", "yellowgreen", "sienna", "brown", "darkgray", "lightblue", "greenyellow", "paleturquoise", "lightsteelblue", "powderblue", "firebrick", "darkgoldenrod", "mediumorchid", "rosybrown", "darkkhaki", "silver", "mediumvioletred", "indianred", "peru", "chocolate", "tan", "lightgrey", "palevioletred", "thistle", "orchid", "goldenrod", "crimson", "gainsboro", "plum", "burlywood", "lightcyan", "lavender", "darksalmon", "violet", "palegoldenrod", "lightcoral", "khaki", "aliceblue", "honeydew", "azure", "sandybrown", "wheat", "beige", "whitesmoke", "mintcream", "ghostwhite", "salmon", "antiquewhite", "linen", "lightgoldenrodyellow", "oldlace", "red", "fuchsia", "magenta", "deeppink", "orangered", "tomato", "hotpink", "coral", "darkorange", "lightsalmon", "orange", "lightpink", "pink", "gold", "peachpuff", "navajowhite", "moccasin", "bisque", "mistyrose", "blanchedalmond", "papayawhip", "lavenderblush", "seashell", "cornsilk", "lemonchiffon", "floralwhite", "snow", "yellow", "lightyellow", "ivory", "white", "ColorPicker", "pixelRatio", "generated", "centerCoordinates", "r", "color", "g", "hueCircle", "initialColor", "previousColor", "applied", "updateCallback", "closeCallback", "insertTo", "_bindHammer", "_setSize", "setUpdateCallback", "setCloseCallback", "_isColorString", "setColor", "setInitial", "rgba", "htmlColor", "isString", "isValidRGB", "rgbaArray", "substr", "split", "isValidRGBA", "isValidHex", "rgbObj", "hexToRGB", "alpha", "_setColor", "_generateHueCircle", "_hide", "storePrevious", "_save", "_apply", "_updatePicker", "_loadLast", "alert", "hsv", "RGBToHSV", "angleConvert", "PI", "radius", "sin", "h", "cos", "colorPickerSelector", "_setOpacity", "_setBrightness", "v", "HSVToRGB", "ctx", "colorPickerCanvas", "getContext", "pixelRation", "devicePixelRatio", "webkitBackingStorePixelRatio", "mozBackingStorePixelRatio", "msBackingStorePixelRatio", "oBackingStorePixelRatio", "backingStorePixelRatio", "setTransform", "w", "clearRect", "putImageData", "fillStyle", "circle", "_fillInstanceProperty", "brightnessRange", "opacityRange", "initialColorDiv", "backgroundColor", "newColorDiv", "colorPickerDiv", "noCanvas", "fontWeight", "opacityDiv", "brightnessDiv", "arrowDiv", "err", "onchange", "oninput", "brightnessLabel", "opacityLabel", "cancelButton", "onclick", "applyButton", "saveButton", "loadButton", "drag", "pinch", "enable", "hammerUtil", "_moveSelector", "hue", "sat", "hfac", "sfac", "rgb", "fillRect", "strokeStyle", "stroke", "getImageData", "rect", "centerY", "centerX", "angle", "atan2", "sqrt", "newTop", "newLeft", "Configurator", "parentModule", "defaultContainer", "changedOptions", "allowCreation", "initialized", "popupCounter", "showButton", "moduleOptions", "domElements", "popupDiv", "popupLimit", "popupHistory", "colorPicker", "wrapper", "_removePopup", "join", "_clean", "setModuleOptions", "counter", "_handleObject", "_makeItem", "_makeHeader", "_makeButton", "_push", "_showPopupIfNeeded", "_getValue", "base", "_len", "Array", "_key", "div", "_makeLabel", "objectLabel", "_makeDropdown", "arr", "selectedValue", "_update", "_makeRange", "defaultValue", "popupString", "popupValue", "factor", "input", "_setupPopup", "generateButton", "_printOptions", "onmouseover", "onmouseout", "optionsContainer", "html", "hideTimeout", "deleteTimeout", "correspondingElement", "opacity", "_makeCheckbox", "checkbox", "checked", "_makeTextInput", "_makeColorField", "defaultColor", "_showColorPicker", "colorString", "obj", "checkOnly", "visibleInSet", "subObj", "newPath", "_handleArray", "draw", "physics", "solver", "enabledPath", "enabledValue", "error", "_constructOptions", "optionsObj", "pointer", "getOptions", "Timeline", "Core", "initTime", "itemsDone", "SyntaxError", "forthArgument", "deepExtend", "setupXSSProtection", "directionFromDom", "domNode", "parentElement", "loadingScreenFragment", "loadingScreen", "components", "_toScreen", "toGlobalScreen", "_toGlobalScreen", "_toTime", "toGlobalTime", "_toGlobalTime", "Range", "TimeAxis", "timeAxis2", "currentTime", "CurrentTime", "eventName", "hasListeners", "getEventProperties", "oncontextmenu", "PointerEvent", "onpointerdown", "onpointermove", "onpointerup", "onmousemove", "onmousedown", "onmouseup", "initialFitDone", "getItemRange", "setWindow", "fit", "initialRangeChangeDone", "args", "_onFit", "_redraw", "_createConfigurator", "newDataSet", "DataSet", "DataView", "focus", "e", "startPos", "_getScrollTop", "initialVerticalScroll", "verticalAnimationFrame", "ease", "willDraw", "done", "getItemVerticalScroll", "itemTop", "shouldScroll", "from", "to", "scrollOffset", "_setScrollTop", "setFinalVerticalPosition", "finalVerticalScroll", "finalVerticalCallback", "zoom", "middle", "stopRolling", "setRange", "getDataRange", "moveTo", "minItem", "maxItem", "getStart", "getEnd", "startSide", "endSide", "lhs", "rhs", "delta", "centerContainerRect", "customTime", "CustomTime", "customTimeFromTarget", "snappedTime", "getTarget", "what", "hasParent", "bar", "pageX", "pageY", "toggleRollingMode", "rolling", "startRolling", "timeline", "itemsetHeight", "contentHeight", "currentScrollHeight", "targetOffset", "DataScale", "autoScaleStart", "autoScaleEnd", "containerHeight", "majorCharHeight", "zeroAlign", "formattingFunction", "majorSteps", "minorSteps", "customLines", "_start", "_end", "minorStepIdx", "magnitudefactor", "determineScale", "roundToMinor", "rounded", "setCharHeight", "setHeight", "minimumStepValue", "orderOfMagnitude", "LN10", "solutionFound", "stepSize", "is_major", "getFirstMajor", "majorStep", "convertValue", "formatValue", "returnValue", "toPrecision", "getLines", "lines", "bottomOffset", "major", "val", "followScale", "other", "oldStepIdx", "oldStart", "oldEnd", "increaseMagnitude", "decreaseMagnitude", "otherZero", "otherStep", "newRange", "myOriginalZero", "majorOffset", "zeroOffset", "screenToValue", "pixels", "DataAxis", "svg", "linegraphOptions", "icons", "majorLinesOffset", "minorLinesOffset", "labelOffsetX", "labelOffsetY", "iconWidth", "alignZeros", "_parseFloat", "text", "linegraphSVG", "DOMelements", "labels", "conversionFactor", "stepPixels", "zeroCrossing", "amountOfSteps", "master", "masterAxis", "svgElements", "iconsRemoved", "amountOfGroups", "_redrawLabels", "framework", "lineContainer", "addGroup", "graphOptions", "removeGroup", "selectiveDeepExtend", "createElementNS", "_redrawGroupIcons", "DOMutil", "iconHeight", "iconOffset", "groupArray", "getLegend", "_cleanupIcons", "backgroundHorizontal", "activeGroups", "_calculateCharSize", "backgroundHorizontalOffsetWidth", "minorLabelHeight", "minorCharHeight", "majorLabelHeight", "minorLineWidth", "minorLineHeight", "majorLineWidth", "majorLineHeight", "_redrawTitle", "customRange", "maxLabelSize", "isMajor", "_redrawLabel", "_redrawLine", "titleWidth", "titleCharHeight", "characterHeight", "textAlign", "largestWidth", "majorCharWidth", "minorCharWidth", "textMinor", "createTextNode", "measureCharMinor", "textMajor", "measureCharMajor", "textTitle", "measureCharTitle", "titleCharWidth", "Points", "getCallback", "screen_x", "screen_y", "getGroupTemplate", "callbackResult", "drawIcon", "fillHeight", "outline", "setAttributeNS", "drawPoints", "styles", "onRender", "Bargraph", "barWidth", "originalWidth", "barChart", "bar1Height", "bar2Height", "processedGroupData", "combinedData", "intersections", "coreDistance", "drawData", "barPoints", "screen_end", "_getDataIntersections", "heightOffset", "_getSafeDrawData", "nextKey", "amount", "resolved", "excludeFromStacking", "zeroPosition", "accumulatedNegative", "accumulatedPositive", "sideBySide", "dataWidth", "pointData", "getStackedYRange", "groupRanges", "groupLabel", "_getStackedYRange", "yAxisOrientation", "yMin", "yMax", "xpos", "Line", "calcPath", "d", "interpolation", "_catmullRom", "_linear", "fillPath", "shaded", "drawShading", "pathArray", "subPathArray", "svgHeight", "dFill", "zero", "serializePath", "inverse", "_catmullRomUniform", "p0", "p1", "p2", "p3", "bp1", "bp2", "normalization", "d1", "d2", "d3", "A", "B", "N", "M", "d3powA", "d2powA", "d3pow2A", "d2pow2A", "d1pow2A", "d1powA", "GraphGroup", "groupsUsingDefaultStyles", "selectiveBridgeObject", "usingDefaultStyle", "insertSort", "setZeroPosition", "pos", "mergeOptions", "parametrization", "Lines", "Bars", "icon", "getYRange", "Legend", "side", "iconSize", "iconSpacing", "clear", "excludeFromLegend", "textArea", "scrollableHeight", "drawLegendIcons", "paddingTop", "LineGraph", "defaultGroup", "sort", "sampling", "graphHeight", "dataAxis", "legend", "abortedGraphUpdate", "updateSVGheight", "updateSVGheightOnResize", "forceGraphUpdate", "lastStart", "yAxisLeft", "yAxisRight", "legendLeft", "legendRight", "_removeGroup", "_updateAllGroupData", "_updateGroup", "groupsContent", "fieldId", "idMap", "groupCounts", "existingItemsMap", "existing_items", "newLength", "extended", "bridgeObject", "orginalY", "_updateGraph", "rangePerPixelInv", "_getSortedGroupIds", "grouplist", "zIndex", "az", "bz", "changeCalled", "minDate", "maxDate", "_getRelevantData", "_applySampling", "_convertXcoordinates", "_getYRanges", "_updateYAxis", "below", "_stack", "_convertYcoordinates", "paths", "subGroupId", "subData", "dx", "dy", "subPrevPoint", "subNextPoint", "dateComparator", "first", "binarySearchValue", "last", "dataContainer", "increment", "amountOfPoints", "xDistance", "pointsPerPixel", "sampledData", "idx", "combinedDataLeft", "combinedDataRight", "yAxisLeftUsed", "yAxisRightUsed", "minLeft", "minRight", "maxLeft", "maxRight", "minVal", "maxVal", "ignore", "_toggleAxisVisiblity", "drawIcons", "tempGroups", "axisUsed", "datapoints", "quarter", "Graph2d", "linegraph", "initialLoad", "isGroupVisible", "getAbsoluteLeft", "getAbsoluteTop", "defaultLanguage", "html", "now", "it", "range", "toDate", "date", "event", "values", "html", "name", "match", "option", "event", "option", "name", "values", "event", "name", "option", "name", "event", "date", "addDays", "date", "addMonths", "date", "date", "defaultOptions", "date", "date", "date", "date", "date", "date", "addWeeks", "date", "addDays", "addYears", "date", "addMonths", "isDate", "date", "isDate", "date", "date", "date", "date", "date", "date", "defaultOptions", "date", "format", "index", "number", "string", "object", "array", "string", "index", "date", "date", "date", "defaultOptions", "date", "defaultOptions", "date", "number", "date", "date", "localize", "formatLong", "format", "date", "defaultOptions", "date", "addWeeks", "addMonths", "addYears", "addDays", "error", "name", "date", "today", "Bootbox"]
}
